Changeset 55964a9ffccd…
Parent 17f59a6a892f…
by
Changes to 3 files · Browse files at 55964a9ffccd Showing diff from parent 17f59a6a892f Diff from another changeset...
@@ -70,7 +70,7 @@ offset++;
const char* relpathptr = path.c_str() + offset;
- std::string relpath = relpathptr;
+ const std::string relpath = relpathptr;
if (relpath.empty())
return S_FALSE; // don't show icon on repo root dir
@@ -79,17 +79,8 @@ return S_FALSE; // don't descend into .hg dir
char status = 0;
-
- if (PathIsDirectory(path.c_str()))
- {
- if (!HgQueryDirstateDirectory(hgroot, path, relpath, status))
- return S_FALSE;
- }
- else
- {
- if (!HgQueryDirstateFile(hgroot, path, relpath, status))
- return S_FALSE;
- }
+ if (!HgQueryDirstate(hgroot, path, relpath, status))
+ return S_FALSE;
if (myTortoiseClass == TORTOISE_OLE_ADDED && status == 'A')
return S_OK;
|
@@ -18,6 +18,8 @@
#include "dirstate.h"
+#include <shlwapi.h>
+
#include <vector>
#include <list>
#include <deque>
@@ -245,23 +247,10 @@}
-int HgQueryDirstateDirectory(
- const std::string& hgroot, const std::string& abspath,
+static int HgQueryDirstateDirectory(
+ const std::string& hgroot, const dirstate* pd,
std::string& relpath, char& outStatus)
{
- const dirstate* pd = dirstatecache::get(hgroot);
- if (!pd)
- {
- TDEBUG_TRACE("HgQueryDirstateDirectory: dirstatecache::get(" << hgroot << ") returns 0");
- return 0;
- }
-
- for (size_t i = 0; i < relpath.size(); ++i)
- {
- if (relpath[i] == '\\')
- relpath[i] = '/';
- }
-
bool added = false;
bool modified = false;
bool empty = true;
@@ -312,30 +301,10 @@}
-int HgQueryDirstateFile(
- const std::string& hgroot, const std::string& abspath,
- std::string& relpath, char& outStatus)
+static int HgQueryDirstateFile(
+ const dirstate* pd, std::string& relpath,
+ const struct _stat& stat, char& outStatus)
{
- struct _stat stat;
- if (0 != lstat(abspath.c_str(), stat))
- {
- TDEBUG_TRACE("HgQueryDirstateFile: lstat(" << abspath << ") fails");
- return 0;
- }
-
- const dirstate* pd = dirstatecache::get(hgroot);
- if (!pd)
- {
- TDEBUG_TRACE("HgQueryDirstateFile: dirstatecache::get(" << hgroot << ") returns 0");
- return 0;
- }
-
- for (size_t i = 0; i < relpath.size(); ++i)
- {
- if (relpath[i] == '\\')
- relpath[i] = '/';
- }
-
for (dirstate::Iter iter = pd->begin(); iter != pd->end(); ++iter)
{
const direntry& e = *iter;
@@ -351,6 +320,42 @@}
+int HgQueryDirstate(
+ const std::string& hgroot, const std::string& abspath,
+ const std::string& relpath_in, char& outStatus)
+{
+ struct _stat stat;
+ if (0 != lstat(abspath.c_str(), stat))
+ {
+ TDEBUG_TRACE("HgQueryDirstate: lstat(" << abspath << ") fails");
+ return 0;
+ }
+
+ const dirstate* pd = dirstatecache::get(hgroot);
+ if (!pd)
+ {
+ TDEBUG_TRACE("HgQueryDirstate: dirstatecache::get(" << hgroot << ") returns 0");
+ return 0;
+ }
+
+ std::string relpath = relpath_in;
+ for (size_t i = 0; i < relpath.size(); ++i)
+ {
+ if (relpath[i] == '\\')
+ relpath[i] = '/';
+ }
+
+ int res = 0;
+
+ if (PathIsDirectory(abspath.c_str()))
+ res = HgQueryDirstateDirectory(hgroot, pd, relpath, outStatus);
+ else
+ res = HgQueryDirstateFile(pd, relpath, stat, outStatus);
+
+ return res;
+}
+
+
static char *revhash_string(const char revhash[HASH_LENGTH])
{
unsigned ix;
|
@@ -3,12 +3,8 @@
#include <string>
-int HgQueryDirstateFile(
+int HgQueryDirstate(
const std::string& hgroot, const std::string& abspath,
- std::string& relpath, char& outStatus);
-
-int HgQueryDirstateDirectory(
- const std::string& hgroot, const std::string& abspath,
- std::string& relpath, char& outStatus);
+ const std::string& relpath, char& outStatus);
#endif
|
Loading...