summaryrefslogtreecommitdiff
path: root/l10ntools
diff options
context:
space:
mode:
authorChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2018-11-12 13:09:23 +0100
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2018-11-17 11:50:31 +0100
commit344773c608ea28718b630590ee1023247aa62d63 (patch)
treeb5517b3b7a4e8764709312ac9c6399400674f91b /l10ntools
parentf5011d7226060e04e7b92f035f71e285b853712c (diff)
localize: sort directories to have predictable sorting in pot files
also remove pre-onegit special handling Change-Id: Ie60be508a188e00b9eea1b743ea10f1f985c459e Reviewed-on: https://gerrit.libreoffice.org/63288 Tested-by: Jenkins Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Diffstat (limited to 'l10ntools')
-rw-r--r--l10ntools/source/localize.cxx55
1 files changed, 21 insertions, 34 deletions
diff --git a/l10ntools/source/localize.cxx b/l10ntools/source/localize.cxx
index c2bc7c262fcb..f169fd31fac7 100644
--- a/l10ntools/source/localize.cxx
+++ b/l10ntools/source/localize.cxx
@@ -23,6 +23,7 @@
#include <cstdlib>
#include <iostream>
#include <string>
+#include <map>
#include <vector>
#include <algorithm>
@@ -319,10 +320,9 @@ bool includeProject(const OString& rProject) {
///
/// @param rUrl the absolute file URL of this directory
///
-/// @param nLevel 0 if this is either the root directory that contains the
-/// projects or one of the clone/* or src/* directories that contain the
-/// additional projects; -1 if this is the clone directory; 1 if this
-/// is a project directory; 2 if this is a directory inside a project
+/// @param nLevel 0 if this is the root directory (core repository)
+/// that contains the individual modules. 1 if it is a toplevel module and
+/// larger values for the subdirectories.
///
/// @param rProject the name of the project (empty and ignored if nLevel <= 0)
/// @param rPotDir the path of pot directory
@@ -337,6 +337,7 @@ void handleDirectory(
throw false; //TODO
}
std::vector<OUString> aFileNames;
+ std::map<OUString, std::map<OString, OString>> aSubDirs;
for (;;) {
osl::DirectoryItem item;
osl::FileBase::RC e = dir.getNextItem(item);
@@ -356,36 +357,18 @@ void handleDirectory(
}
const OString sDirName =
OUStringToOString(stat.getFileName(),RTL_TEXTENCODING_UTF8);
- switch (nLevel) {
- case -1: // the clone or src directory
- if (stat.getFileType() == osl::FileStatus::Directory) {
- handleDirectory(
- stat.getFileURL(), 0, OString(), rPotDir);
- }
- break;
- case 0: // a root directory
- if (stat.getFileType() == osl::FileStatus::Directory) {
- if (includeProject(sDirName)) {
- handleDirectory(
- stat.getFileURL(), 1, sDirName, rPotDir.concat("/").concat(sDirName));
- } else if ( sDirName == "clone" ||
- sDirName == "src" )
- {
- handleDirectory( stat.getFileURL(), -1, OString(), rPotDir);
- }
- }
- break;
- default:
- if (stat.getFileType() == osl::FileStatus::Directory)
- {
- handleDirectory(
- stat.getFileURL(), 2, rProject, rPotDir.concat("/").concat(sDirName));
- }
- else
- {
- aFileNames.push_back(stat.getFileURL());
- }
- break;
+ switch (nLevel)
+ {
+ case 0: // a root directory
+ if (stat.getFileType() == osl::FileStatus::Directory && includeProject(sDirName))
+ aSubDirs[stat.getFileURL()][sDirName] = rPotDir.concat("/").concat(sDirName);
+ break;
+ default:
+ if (stat.getFileType() == osl::FileStatus::Directory)
+ aSubDirs[stat.getFileURL()][rProject] = rPotDir.concat("/").concat(sDirName);
+ else
+ aFileNames.push_back(stat.getFileURL());
+ break;
}
}
@@ -409,6 +392,10 @@ void handleDirectory(
throw false; //TODO
}
+ for (auto const& elem : aSubDirs)
+ handleDirectory(elem.first, nLevel + 1, elem.second.begin()->first,
+ elem.second.begin()->second);
+
//Remove empty pot directory
OUString sPoPath =
OStringToOUString(