aboutsummaryrefslogtreecommitdiffstats
path: root/tools/flags
diff options
context:
space:
mode:
authorhalcanary <halcanary@google.com>2015-01-18 10:39:25 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-18 10:39:25 -0800
commit03758b8c4a7f22c74a107905d8e16effab1c0442 (patch)
tree7cfef220dd4e5f3e223a4cd4a2112b56b9e579ec /tools/flags
parent46d36f0e7b709a077c647841eee23bd3efdc4117 (diff)
downloadplatform_external_skqp-03758b8c4a7f22c74a107905d8e16effab1c0442.tar.gz
platform_external_skqp-03758b8c4a7f22c74a107905d8e16effab1c0442.tar.bz2
platform_external_skqp-03758b8c4a7f22c74a107905d8e16effab1c0442.zip
tool --help alphabetizes command line flags
Review URL: https://codereview.chromium.org/854193003
Diffstat (limited to 'tools/flags')
-rw-r--r--tools/flags/SkCommandLineFlags.cpp34
1 files changed, 25 insertions, 9 deletions
diff --git a/tools/flags/SkCommandLineFlags.cpp b/tools/flags/SkCommandLineFlags.cpp
index c25fec5343..dc99fec8cd 100644
--- a/tools/flags/SkCommandLineFlags.cpp
+++ b/tools/flags/SkCommandLineFlags.cpp
@@ -7,6 +7,7 @@
#include "SkCommandLineFlags.h"
#include "SkTDArray.h"
+#include "SkTSort.h"
DEFINE_bool(undefok, false, "Silently ignore unknown flags instead of crashing.");
@@ -191,6 +192,14 @@ static void print_help_for_flag(const SkFlagInfo* flag) {
SkDebugf("\n");
}
+namespace {
+struct CompareFlagsByName {
+ bool operator()(SkFlagInfo* a, SkFlagInfo* b) const {
+ return strcmp(a->name().c_str(), b->name().c_str()) < 0;
+ }
+};
+} // namespace
+
void SkCommandLineFlags::Parse(int argc, char** argv) {
// Only allow calling this function once.
static bool gOnce;
@@ -218,24 +227,31 @@ void SkCommandLineFlags::Parse(int argc, char** argv) {
SkDebugf("%s\n%s\n", argv[0], gUsage.c_str());
}
SkDebugf("Flags:\n");
- SkFlagInfo* flag = SkCommandLineFlags::gHead;
- while (flag != NULL) {
+
+ if (0 == helpFlags.count()) {
// If no flags followed --help, print them all
- bool printFlag = 0 == helpFlags.count();
- if (!printFlag) {
+ SkTDArray<SkFlagInfo*> allFlags;
+ for (SkFlagInfo* flag = SkCommandLineFlags::gHead; flag;
+ flag = flag->next()) {
+ allFlags.push(flag);
+ }
+ SkTQSort(&allFlags[0], &allFlags[allFlags.count() - 1],
+ CompareFlagsByName());
+ for (int i = 0; i < allFlags.count(); ++i) {
+ print_help_for_flag(allFlags[i]);
+ }
+ } else {
+ for (SkFlagInfo* flag = SkCommandLineFlags::gHead; flag;
+ flag = flag->next()) {
for (int k = 0; k < helpFlags.count(); k++) {
if (flag->name().equals(helpFlags[k]) ||
flag->shortName().equals(helpFlags[k])) {
- printFlag = true;
+ print_help_for_flag(flag);
helpFlags.remove(k);
break;
}
}
}
- if (printFlag) {
- print_help_for_flag(flag);
- }
- flag = flag->next();
}
if (helpFlags.count() > 0) {
SkDebugf("Requested help for unrecognized flags:\n");