<table><tr><td style="">aaronpuchert added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D7745" rel="noreferrer">View Revision</a></tr></table><br /><div><div><blockquote style="border-left: 3px solid #8C98B8;
          color: #6B748C;
          font-style: italic;
          margin: 4px 0 12px 0;
          padding: 8px 12px;
          background-color: #F8F9FC;">
<div style="font-style: normal;
          padding-bottom: 4px;">In <a href="https://phabricator.kde.org/D7745#146271" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: line-through;" rel="noreferrer">D7745#146271</a>, <a href="https://phabricator.kde.org/p/rjvbb/" style="
              border-color: #f1f7ff;
              color: #19558d;
              background-color: #f1f7ff;
                border: 1px solid transparent;
                border-radius: 3px;
                font-weight: bold;
                padding: 0 4px;" rel="noreferrer">@rjvbb</a> wrote:</div>
<div style="margin: 0;
          padding: 0;
          border: 0;
          color: rgb(107, 116, 140);"><p>Seriously, how many of us use KDevelop to work on projects the size of GCC or llvm and need dirwatching on the whole tree? How expensive is that on Linux, *after* the initial import?</p></div>
</blockquote>

<p>Watching directories is quite essential when working with Git or other SCMs. When checking out another branch, I want KDevelop's file tree to be updated as well.</p>

<p>I think the main problem here is that <tt style="background: #ebebeb; font-size: 13px;">KDirWatch</tt> uses vastly different implementations. As it says in <tt style="background: #ebebeb; font-size: 13px;">kdirwatch.h</tt>:</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>The implementation uses the INOTIFY functionality on LINUX. Otherwise the FAM service is used, when available. As a last resort, a regular polling for change of modification times is done; the polling interval is a global config option: DirWatch/PollInterval and DirWatch/NFSPollInterval for NFS mounted directories.</p></blockquote>

<p>I guess <a href="https://linux.die.net/man/7/inotify" class="remarkup-link" target="_blank" rel="noreferrer">inotify</a> is quite efficient as an API for exactly that purpose, while the fallback methods are not. So maybe it makes sense to have some size restriction based on the method used in KDirWatch, which can be obtained via <tt style="background: #ebebeb; font-size: 13px;">KDirWatch::internalMethod()</tt>. Of course it takes some time to open a large file tree even on Linux, but no longer than other IDEs I know of.</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>Maybe the proposed checkbox to en/disable dirwatching should be coupled with a project-level per-directory setting, "watch this directory for changes", hidden simply (?) in the directory context menu and/or the "project filter" settings.</p>

<p>Come to think of it, this is really something that can be compared to mail folder synchronisation. In KMail you can indicate for each folder if it has to be included in the scheduled email check (the version I use supports IMAP IDLE only on the inbox), but a sync will be performed each time to select a folder. In KDevelop this could be coupled to directory expansion in the project manager. I don't know if that's doable API-wise, but I like the idea, it sounds a lot quicker than doing a right-click and selecting the "Reload" action.</p></blockquote>

<p>That works if your main method to open files is to use the project manager. However, some people prefer opening files via the <em>Quick Open</em> bar. In that case you want to watch the entire tree, otherwise new files might be invisible for a long time.</p>

<p>The difference between IMAP and our situation is that in the former case there is a network connection (usually WAN), while in the latter case all files are typically local.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R32 KDevelop</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D7745" rel="noreferrer">https://phabricator.kde.org/D7745</a></div></div><br /><div><strong>To: </strong>rjvbb, KDevelop<br /><strong>Cc: </strong>aaronpuchert, arrowdodger, brauch, kdevelop-devel, geetamc, Pilzschaf, akshaydeo, surgenight<br /></div>