<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Sep 14, 2014 at 12:26 AM, Milian Wolff <span dir="ltr"><<a href="mailto:mail@milianw.de" target="_blank">mail@milianw.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">On Saturday 13 September 2014 16:29:20 Milian Wolff wrote:<br>
> Hello all!<br>
><br>
> At Akademy, I spent the last 2 days or so porting our code from KUrl to<br>
> QUrl. This is pretty tricky as we use URLs in (too) many places of our API.<br>
> Locally, I have it now compiling and it even seems to work OK. I'll rebase<br>
> it on the recent changes today and then push it. Some notes below, please<br>
> read.<br>
><br>
> NOTE: I won't have time to port all external plugins! Please take care of<br>
> this if you maintain a plugin. If you need help, please ask here on the<br>
> list.<br>
><br>
> Porting notes:<br>
><br>
> The most important thing is to make the QUrl <=> QString() conversion<br>
> explicit. That can be done via<br>
> add_definitions(-DQT_NO_URL_CAST_FROM_STRING).<br>
><br>
> Second step then is to use kde/kdesdk/kde-dev-scripts/kf5/<a href="http://convert-kurl.pl" target="_blank">convert-kurl.pl</a> on<br>
> your files. This will do the most tedious porting work for you. But it's by<br>
> far not enough. You'll have to review all changes.<br>
><br>
> In general, if you do not have to interact with QUrl API, prefer<br>
> KDevelop::Path if possible. This is trivial to port to, as it mimicks the<br>
> KUrl API nearly 1-to-1.<br>
><br>
> If you are only interested in local files, QDir and QFileInfo are also good<br>
> options to use.<br>
><br>
> When you do need QUrl's, then here are some remarks:<br>
><br>
> Never do QUrl(IndexedString(...).str()). Always use IndexedString.toUrl().<br>
><br>
> Nearly use QUrl(QString). Only do this if you want to create a relative URL<br>
> which you then pass to QUrl::resolved or similar. Otherwise e.g. a<br>
> QUrl("/foo/bar") would create a relative URL, not an absolute local file<br>
> URL. I've added checks for that in many central places, so if you do<br>
> something wrong, you'll hopefully get an assertion. In general, prefer<br>
> QUrl::fromLocalFile where appropriate, or QUrl::fromUserInput otherwise.<br>
><br>
> Never use QUrl::resolved with a ".." to emulate KUrl::cdUp. Either use<br>
> KIO::upUrl or use QUrl::adjusted(QUrl::RemoveFilename |<br>
> QUrl::StripTrailingSlash).<br>
><br>
> During the port I noticed that we abuse QUrl in far too many places of our<br>
> API. A long-term goal will be to refactor these places. The VCS subsystem<br>
> e.g. uses QUrl to represent file paths, which is overkill and easy to get<br>
> wrong (see above). KDevelop::Path would be a better choice here. In<br>
> contrast, we'll need to refactor the WorkingSets code to use QUrl instead<br>
> of QString for the "specifier" which gets stored there a lot. Finally, I<br>
> really want to see an IndexedPath in our DUChain code to make that code<br>
> more typesafe and explicit.<br>
<br>
</div></div>Hey all,<br>
<br>
I've now pushed my mega porting patch. I've also fixed quite a few more things<br>
while at it, and potentially broke hell loose. So please test this and check<br>
whether things are working as expected. Note that I added a lod of paranoid<br>
assertions in our codebase. These might need to be re-evaluated and/or removed<br>
over the next period. They helped me find wrong usage of QUrl though, so I<br>
think we should try to get our code working with it.<br>
<br>
There are still some unit tests failing for me, most notably in CMake and old-<br>
Cpp. I think most where failing even without my patches, but maybe I<br>
introduced new issues as well.<br>
<br>
I hope that together we can sort this all out.<br>
<div class=""><div class="h5"><br>
Bye<br></div></div></blockquote><div><br></div><div>There's only a test not passing now on kdevelop:</div><div><a href="http://build.kde.org/job/kdevplatform_master_qt5/">http://build.kde.org/job/kdevplatform_master_qt5/</a></div><div><a href="http://build.kde.org/job/kdevelop_master_qt5/">http://build.kde.org/job/kdevelop_master_qt5/</a> </div><div><br></div><div>Amazing "GNU C Compiler Warnings Trend" plot ;)</div><div><br></div><div>Aleix</div></div><br></div></div>