Export of internal Abseil changes

--
00c451dc81be7fe05f982b08b4ea1edc2ca2c1c5 by Abseil Team <absl-team@google.com>:

remove a test that is currently broken on emscripten from running on
emscripten.

PiperOrigin-RevId: 262005667

--
9df5f5acb65996bdb99900039a4f01a44811aa14 by CJ Johnson <johnsoncj@google.com>:

Adds a layer of macro-indirection to opening up namespace absl inside a macro. This helps avoid an issue identified with the LTS inline namespaces

PiperOrigin-RevId: 261990937

--
5d40aa129cd77a1b853e5389aff7eacffe5c8204 by Gennadiy Rozental <rogeeff@google.com>:

Fix handling of new lines in flag help descriptions.

If there are explicit new lines in a flag help description string,
we respect it and format the usage message accordingly.

PiperOrigin-RevId: 261974244

--
4997b5a2ddb983969059470a2d2bc2416b3d785e by CJ Johnson <johnsoncj@google.com>:

Import of CCTZ from GitHub.

PiperOrigin-RevId: 261955031
GitOrigin-RevId: 00c451dc81be7fe05f982b08b4ea1edc2ca2c1c5
Change-Id: I5a13bfb15bba0f7b6e49c0655c57c3addfeb1c72
This commit is contained in:
Abseil Team 2019-08-06 15:11:42 -07:00 committed by CJ Johnson
parent 67222ffc4c
commit b49b8d16b6
5 changed files with 57 additions and 8 deletions

View file

@ -217,7 +217,7 @@ void SetFlag(absl::Flag<T>* flag, const V& v) {
// global name for FLAGS_no<flag_name> symbol, thus preventing the possibility // global name for FLAGS_no<flag_name> symbol, thus preventing the possibility
// of defining two flags with names foo and nofoo. // of defining two flags with names foo and nofoo.
#define ABSL_FLAG_IMPL(Type, name, default_value, help) \ #define ABSL_FLAG_IMPL(Type, name, default_value, help) \
namespace absl {} \ namespace absl /* block flags in namespaces */ {} \
ABSL_FLAG_IMPL_DECLARE_DEF_VAL_WRAPPER(name, Type, default_value) \ ABSL_FLAG_IMPL_DECLARE_DEF_VAL_WRAPPER(name, Type, default_value) \
ABSL_FLAG_IMPL_DECLARE_HELP_WRAPPER(name, help) \ ABSL_FLAG_IMPL_DECLARE_HELP_WRAPPER(name, help) \
ABSL_CONST_INIT absl::Flag<Type> FLAGS_##name( \ ABSL_CONST_INIT absl::Flag<Type> FLAGS_##name( \

View file

@ -111,8 +111,16 @@ class FlagHelpPrettyPrinter {
std::vector<absl::string_view> tokens; std::vector<absl::string_view> tokens;
if (wrap_line) { if (wrap_line) {
tokens = absl::StrSplit(str, absl::ByAnyChar(" \f\n\r\t\v"), for (auto line : absl::StrSplit(str, absl::ByAnyChar("\n\r"))) {
absl::SkipEmpty()); if (!tokens.empty()) {
// Keep line separators in the input std::string.
tokens.push_back("\n");
}
for (auto token :
absl::StrSplit(line, absl::ByAnyChar(" \t"), absl::SkipEmpty())) {
tokens.push_back(token);
}
}
} else { } else {
tokens.push_back(str); tokens.push_back(str);
} }
@ -120,6 +128,12 @@ class FlagHelpPrettyPrinter {
for (auto token : tokens) { for (auto token : tokens) {
bool new_line = (line_len_ == 0); bool new_line = (line_len_ == 0);
// Respect line separators in the input std::string.
if (token == "\n") {
EndLine();
continue;
}
// Write the token, ending the std::string first if necessary/possible. // Write the token, ending the std::string first if necessary/possible.
if (!new_line && (line_len_ + token.size() >= max_line_len_)) { if (!new_line && (line_len_ + token.size() >= max_line_len_)) {
EndLine(); EndLine();

View file

@ -48,6 +48,14 @@ std::string AbslUnparseFlag(const UDT&) { return "UDT{}"; }
ABSL_FLAG(UDT, usage_reporting_test_flag_05, {}, ABSL_FLAG(UDT, usage_reporting_test_flag_05, {},
"usage_reporting_test_flag_05 help message"); "usage_reporting_test_flag_05 help message");
ABSL_FLAG(
std::string, usage_reporting_test_flag_06, {},
"usage_reporting_test_flag_06 help message.\n"
"\n"
"Some more help.\n"
"Even more long long long long long long long long long long long long "
"help message.");
namespace { namespace {
namespace flags = absl::flags_internal; namespace flags = absl::flags_internal;
@ -173,6 +181,11 @@ TEST_F(UsageReportingTest, TestFlagsHelpHRF) {
default: 1000000000000004; default: 1000000000000004;
-usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message); -usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message);
default: UDT{}; default: UDT{};
-usage_reporting_test_flag_06 (usage_reporting_test_flag_06 help message.
Some more help.
Even more long long long long long long long long long long long long help
message.); default: "";
)"; )";
std::stringstream test_buf_01; std::stringstream test_buf_01;
@ -244,6 +257,11 @@ TEST_F(UsageReportingTest, TestUsageFlag_helpshort) {
default: 1000000000000004; default: 1000000000000004;
-usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message); -usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message);
default: UDT{}; default: UDT{};
-usage_reporting_test_flag_06 (usage_reporting_test_flag_06 help message.
Some more help.
Even more long long long long long long long long long long long long help
message.); default: "";
)"); )");
} }
@ -268,6 +286,11 @@ TEST_F(UsageReportingTest, TestUsageFlag_help) {
default: 1000000000000004; default: 1000000000000004;
-usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message); -usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message);
default: UDT{}; default: UDT{};
-usage_reporting_test_flag_06 (usage_reporting_test_flag_06 help message.
Some more help.
Even more long long long long long long long long long long long long help
message.); default: "";
Try --helpfull to get a list of all flags. Try --helpfull to get a list of all flags.
)"); )");
@ -294,6 +317,11 @@ TEST_F(UsageReportingTest, TestUsageFlag_helppackage) {
default: 1000000000000004; default: 1000000000000004;
-usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message); -usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message);
default: UDT{}; default: UDT{};
-usage_reporting_test_flag_06 (usage_reporting_test_flag_06 help message.
Some more help.
Even more long long long long long long long long long long long long help
message.); default: "";
Try --helpfull to get a list of all flags. Try --helpfull to get a list of all flags.
)"); )");
@ -354,6 +382,11 @@ TEST_F(UsageReportingTest, TestUsageFlag_helpon) {
default: 1000000000000004; default: 1000000000000004;
-usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message); -usage_reporting_test_flag_05 (usage_reporting_test_flag_05 help message);
default: UDT{}; default: UDT{};
-usage_reporting_test_flag_06 (usage_reporting_test_flag_06 help message.
Some more help.
Even more long long long long long long long long long long long long help
message.); default: "";
)"); )");
} }

View file

@ -100,9 +100,9 @@ const char* ParseDateTime(const char* p, PosixTransition* res) {
int weekday = 0; int weekday = 0;
if ((p = ParseInt(p + 1, 0, 6, &weekday)) != nullptr) { if ((p = ParseInt(p + 1, 0, 6, &weekday)) != nullptr) {
res->date.fmt = PosixTransition::M; res->date.fmt = PosixTransition::M;
res->date.m.month = static_cast<int_fast8_t>(month); res->date.m.month = static_cast<std::int_fast8_t>(month);
res->date.m.week = static_cast<int_fast8_t>(week); res->date.m.week = static_cast<std::int_fast8_t>(week);
res->date.m.weekday = static_cast<int_fast8_t>(weekday); res->date.m.weekday = static_cast<std::int_fast8_t>(weekday);
} }
} }
} }
@ -110,13 +110,13 @@ const char* ParseDateTime(const char* p, PosixTransition* res) {
int day = 0; int day = 0;
if ((p = ParseInt(p + 1, 1, 365, &day)) != nullptr) { if ((p = ParseInt(p + 1, 1, 365, &day)) != nullptr) {
res->date.fmt = PosixTransition::J; res->date.fmt = PosixTransition::J;
res->date.j.day = static_cast<int_fast16_t>(day); res->date.j.day = static_cast<std::int_fast16_t>(day);
} }
} else { } else {
int day = 0; int day = 0;
if ((p = ParseInt(p, 0, 365, &day)) != nullptr) { if ((p = ParseInt(p, 0, 365, &day)) != nullptr) {
res->date.fmt = PosixTransition::N; res->date.fmt = PosixTransition::N;
res->date.j.day = static_cast<int_fast16_t>(day); res->date.n.day = static_cast<std::int_fast16_t>(day);
} }
} }
} }

View file

@ -1628,6 +1628,7 @@ TEST(optionalTest, AssignmentConstraints) {
EXPECT_TRUE(absl::is_copy_assignable<absl::optional<AnyLike>>::value); EXPECT_TRUE(absl::is_copy_assignable<absl::optional<AnyLike>>::value);
} }
#if !defined(__EMSCRIPTEN__)
struct NestedClassBug { struct NestedClassBug {
struct Inner { struct Inner {
bool dummy = false; bool dummy = false;
@ -1650,5 +1651,6 @@ TEST(optionalTest, InPlaceTSFINAEBug) {
o.emplace(); o.emplace();
EXPECT_TRUE(o.has_value()); EXPECT_TRUE(o.has_value());
} }
#endif // !defined(__EMSCRIPTEN__)
} // namespace } // namespace