Changeset cc54fcf69e20…
Parent 12e5e2d8650d…
by
Changes to 3 files · Browse files at cc54fcf69e20 Showing diff from parent 12e5e2d8650d Diff from another changeset...
@@ -31,8 +31,10 @@
Dirstate* Dirstatecache::get(
- const std::string& hgroot, const std::string& cwd)
+ const std::string& hgroot, const std::string& cwd, bool& unset)
{
+ unset = false;
+
typedef std::list<E>::iterator Iter;
Iter iter = cache().begin();
@@ -92,6 +94,8 @@
if (iter->dstate)
{
+ unset = iter->unset;
+
if (!new_stat)
return iter->dstate;
@@ -108,15 +112,27 @@ TDEBUG_TRACE("Dirstatecache::get: reading " << hgroot);
}
- bool unset = false;
+ unset = false;
unsigned tc0 = GetTickCount();
std::auto_ptr<Dirstate> ds = Dirstate::read(path, unset);
unsigned tc1 = GetTickCount();
+ bool request_thgstatus_update = true;
+
if (unset)
{
- TDEBUG_TRACE("Dirstatecache::get: has unset entries");
+ if (iter->unset)
+ {
+ TDEBUG_TRACE(
+ "Dirstatecache::get: **** old and new have unset entries");
+ request_thgstatus_update = false;
+ }
+ else
+ {
+ TDEBUG_TRACE("Dirstatecache::get: new has unset entries");
+ }
}
+
iter->unset = unset;
delete iter->dstate;
@@ -129,7 +145,15 @@ iter->dstate_mtime = stat.mtime;
iter->dstate_size = stat.size;
- Thgstatus::update(cwd);
+ if (request_thgstatus_update)
+ {
+ TDEBUG_TRACE("Dirstatecache::get: calling Thgstatus::update");
+ Thgstatus::update(cwd);
+ }
+ else
+ {
+ TDEBUG_TRACE("Dirstatecache::get: omitting Thgstatus::update");
+ }
return iter->dstate;
}
|
@@ -47,7 +47,8 @@ static std::list<E>& cache();
public:
- static Dirstate* get(const std::string& hgroot, const std::string& cwd);
+ static Dirstate* get(
+ const std::string& hgroot, const std::string& cwd, bool& unset);
static void invalidate(const std::string& hgroot);
};
|
@@ -182,11 +182,13 @@ return 0;
}
+ bool unset = false;
+
if (cur.isdir)
{
if (!relpath.empty())
{
- Dirstate* pds2 = Dirstatecache::get(cur.hgroot, cur.basedir);
+ Dirstate* pds2 = Dirstatecache::get(cur.hgroot, cur.basedir, unset);
if (pds2 && !pds2->root().getdir(relpath))
{
last = cur;
@@ -198,7 +200,7 @@ }
else
{
- Dirstate* pds = Dirstatecache::get(cur.hgroot, cur.basedir);
+ Dirstate* pds = Dirstatecache::get(cur.hgroot, cur.basedir, unset);
if (!pds)
{
TDEBUG_TRACE("HgQueryDirstate: Dirstatecache::get("
@@ -245,7 +247,17 @@
if (basedir_status != 'M')
{
- Thgstatus::update(cur.hgroot);
+ if (unset)
+ {
+ TDEBUG_TRACE(
+ "HgQueryDirstate: omitting Thgstatus::update");
+ }
+ else
+ {
+ TDEBUG_TRACE(
+ "HgQueryDirstate: calling Thgstatus::update");
+ Thgstatus::update(cur.hgroot);
+ }
}
}
}
|
Loading...