Compare commits

...

9 Commits

11 changed files with 121 additions and 83 deletions

View File

@ -9,7 +9,7 @@ environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu1804
DOCKER_IMAGE: jevolk/construct:ubuntu-22.04-base-build-gcc-9-amd64
DOCKER_IMAGE: jevolk/construct:ubuntu-22.04-base-build-gcc-10-amd64
- APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu1804
DOCKER_IMAGE: jevolk/construct:ubuntu-22.04-base-build-gcc-12-amd64

View File

@ -49,6 +49,7 @@ ARGS="$ARGS --build-arg extra_packages_dev1=g++"
ARGS="$ARGS --build-arg cc=gcc --build-arg cxx=g++"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-built-gcc-amd64 $BASEDIR/alpine/3.16/built
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-test-gcc-amd64 $BASEDIR/alpine/3.16/test
docker push $ACCT/$REPO:alpine-3.16-base-built-gcc-amd64
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
@ -59,6 +60,7 @@ ARGS="$ARGS --build-arg extra_packages_dev2=llvm-dev"
ARGS="$ARGS --build-arg cc=clang --build-arg cxx=clang++"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-built-clang-amd64 $BASEDIR/alpine/3.16/built
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-test-clang-amd64 $BASEDIR/alpine/3.16/test
docker push $ACCT/$REPO:alpine-3.16-base-built-clang-amd64
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
@ -68,6 +70,7 @@ ARGS="$ARGS --build-arg extra_packages_dev1=g++"
ARGS="$ARGS --build-arg cc=gcc --build-arg cxx=g++"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-built-gcc-amd64 $BASEDIR/alpine/3.16/built
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-test-gcc-amd64 $BASEDIR/alpine/3.16/test
docker push $ACCT/$REPO:alpine-3.16-full-built-gcc-amd64
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
@ -78,15 +81,6 @@ ARGS="$ARGS --build-arg extra_packages_dev2=llvm-dev"
ARGS="$ARGS --build-arg cc=clang --build-arg cxx=clang++"
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-built-clang-amd64 $BASEDIR/alpine/3.16/built
docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-test-clang-amd64 $BASEDIR/alpine/3.16/test
#
# Pushed images
#
docker push $ACCT/$REPO:alpine-3.16-base-built-gcc-amd64
docker push $ACCT/$REPO:alpine-3.16-base-built-clang-amd64
docker push $ACCT/$REPO:alpine-3.16-full-built-gcc-amd64
docker push $ACCT/$REPO:alpine-3.16-full-built-clang-amd64
###############################################################################
@ -117,12 +111,14 @@ docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-amd64 $BASEDIR/ubuntu/22.04/
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
ARGS="$ARGS --build-arg feature=base"
ARGS="$ARGS --build-arg extra_packages_dev=gcc-9"
ARGS="$ARGS --build-arg extra_packages_dev1=g++-9"
ARGS="$ARGS --build-arg cc=gcc-9 --build-arg cxx=g++-9"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-build-gcc-9-amd64 $BASEDIR/ubuntu/22.04/build
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-built-gcc-9-amd64 $BASEDIR/ubuntu/22.04/built
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-test-gcc-9-amd64 $BASEDIR/ubuntu/22.04/test
ARGS="$ARGS --build-arg extra_packages_dev=gcc-10"
ARGS="$ARGS --build-arg extra_packages_dev1=g++-10"
ARGS="$ARGS --build-arg cc=gcc-10 --build-arg cxx=g++-10"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-build-gcc-10-amd64 $BASEDIR/ubuntu/22.04/build
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-built-gcc-10-amd64 $BASEDIR/ubuntu/22.04/built
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-test-gcc-10-amd64 $BASEDIR/ubuntu/22.04/test
docker push $ACCT/$REPO:ubuntu-22.04-base-build-gcc-10-amd64
docker push $ACCT/$REPO:ubuntu-22.04-base-built-gcc-10-amd64
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
@ -133,6 +129,8 @@ ARGS="$ARGS --build-arg cc=gcc-12 --build-arg cxx=g++-12"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-build-gcc-12-amd64 $BASEDIR/ubuntu/22.04/build
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-built-gcc-12-amd64 $BASEDIR/ubuntu/22.04/built
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-test-gcc-12-amd64 $BASEDIR/ubuntu/22.04/test
docker push $ACCT/$REPO:ubuntu-22.04-base-build-gcc-12-amd64
docker push $ACCT/$REPO:ubuntu-22.04-base-built-gcc-12-amd64
ARGS="$ARGS_"
ARGS="$ARGS --platform linux/amd64"
@ -144,38 +142,5 @@ ARGS="$ARGS --build-arg cc=clang-15 --build-arg cxx=clang++-15"
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-build-clang-15-amd64 $BASEDIR/ubuntu/22.04/build
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-built-clang-15-amd64 $BASEDIR/ubuntu/22.04/built
docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-test-clang-15-amd64 $BASEDIR/ubuntu/22.04/test
#
# Pushed images
#
docker push $ACCT/$REPO:ubuntu-22.04-base-build-gcc-9-amd64
docker push $ACCT/$REPO:ubuntu-22.04-base-built-gcc-9-amd64
docker push $ACCT/$REPO:ubuntu-22.04-base-build-gcc-12-amd64
docker push $ACCT/$REPO:ubuntu-22.04-base-built-gcc-12-amd64
docker push $ACCT/$REPO:ubuntu-22.04-full-build-clang-15-amd64
docker push $ACCT/$REPO:ubuntu-22.04-full-built-clang-15-amd64
###############################################################################
#
# Ubuntu 20.04
#
#docker build -t $ACCT/$REPO:ubuntu-20.04 $BASEDIR/ubuntu/20.04/base
#docker build -t $ACCT/$REPO:ubuntu-20.04-gcc-8 $BASEDIR/ubuntu/20.04/gcc-8
#docker build -t $ACCT/$REPO:ubuntu-20.04-gcc-9 $BASEDIR/ubuntu/20.04/gcc-9
#docker build -t $ACCT/$REPO:ubuntu-20.04-gcc-10 $BASEDIR/ubuntu/20.04/gcc-10
#docker build -t $ACCT/$REPO:ubuntu-20.04-clang-9 $BASEDIR/ubuntu/20.04/clang-9
#docker build -t $ACCT/$REPO:ubuntu-20.04-clang-10 $BASEDIR/ubuntu/20.04/clang-10
#docker build -t $ACCT/$REPO:ubuntu-20.04-clang-11 $BASEDIR/ubuntu/20.04/clang-11
#docker build -t $ACCT/$REPO:ubuntu-20.04-clang-12 $BASEDIR/ubuntu/20.04/clang-12
#docker push $ACCT/$REPO:ubuntu-20.04-gcc-8
#docker push $ACCT/$REPO:ubuntu-20.04-gcc-9
#docker push $ACCT/$REPO:ubuntu-20.04-gcc-10
#docker push $ACCT/$REPO:ubuntu-20.04-clang-9
#docker push $ACCT/$REPO:ubuntu-20.04-clang-10
#docker push $ACCT/$REPO:ubuntu-20.04-clang-11
#docker push $ACCT/$REPO:ubuntu-20.04-clang-12

View File

@ -60,17 +60,18 @@ template<class T>
struct ircd::json::keys<T>::include
:selection
{
constexpr include(const vector_view<const string_view> list)
include(const vector_view<const string_view> &keys)
:selection{0}
{
for(const auto key : list)
for(const auto &key : keys)
selection::set(key, true);
}
constexpr include(const std::initializer_list<const string_view> list)
template<class... list>
consteval include(list&&... keys)
:selection{0}
{
for(const auto key : list)
for(auto&& key : {keys...})
selection::set(key, true);
}
@ -86,17 +87,19 @@ template<class T>
struct ircd::json::keys<T>::exclude
:selection
{
constexpr exclude(const vector_view<const string_view> list)
exclude(const vector_view<const string_view> &keys)
:selection{}
{
for(const auto key : list)
for(const auto &key : keys)
selection::set(key, false);
}
constexpr exclude(const std::initializer_list<const string_view> list)
template<class... list>
consteval exclude(list&&... keys)
:selection{}
{
for(const auto key : list)
for(auto&& key : {keys...})
selection::set(key, false);
}

View File

@ -33,7 +33,7 @@ namespace ircd::m::media::file
room::id::buf room_id(const mxc &);
size_t read(const room &, const closure &);
size_t write(const room &, const user::id &, const const_buffer &content, const string_view &content_type);
size_t write(const room &, const user::id &, const const_buffer &content, const string_view &content_type, const string_view &name = {});
room::id::buf
download(const mxc &,

View File

@ -16,13 +16,13 @@ namespace ircd
struct string_view;
constexpr size_t _constexpr_strlen(const char *) noexcept;
template<size_t N> constexpr size_t _constexpr_strlen(const char (&)[N]) noexcept;
template<size_t N> consteval size_t _constexpr_strlen(const char (&)[N]) noexcept;
constexpr bool _constexpr_equal(const char *a, const char *b) noexcept;
constexpr bool _constexpr_equal(const char *a, const char *b, size_t) noexcept;
constexpr bool _constexpr_equal(const char *a, const size_t, const char *b, const size_t) noexcept;
constexpr bool _constexpr_equal(const string_view &, const string_view &) noexcept;
template<size_t N0, size_t N1> constexpr bool _constexpr_equal(const char (&)[N0], const char (&)[N1]) noexcept;
template<size_t N0, size_t N1> consteval bool _constexpr_equal(const char (&)[N0], const char (&)[N1]) noexcept;
constexpr const char *data(const string_view &) noexcept;
constexpr size_t size(const string_view &) noexcept;
@ -327,7 +327,7 @@ noexcept
template<size_t N0,
size_t N1>
constexpr bool
consteval bool
ircd::_constexpr_equal(const char (&a)[N0],
const char (&b)[N1])
noexcept
@ -347,7 +347,10 @@ ircd::_constexpr_equal(const string_view &a,
const string_view &b)
noexcept
{
return _constexpr_equal(data(a), size(a), data(b), size(b));
if constexpr(__cplusplus >= 202002L)
return a == b;
else
return _constexpr_equal(data(a), size(a), data(b), size(b));
}
constexpr bool
@ -378,7 +381,7 @@ noexcept
}
template<size_t N>
constexpr size_t
consteval size_t
ircd::_constexpr_strlen(const char (&a)[N])
noexcept
{

View File

@ -152,7 +152,9 @@ const
{
constexpr auto max(words - 1);
const auto off(pos / 8);
assert(off <= max);
if(!__builtin_is_constant_evaluated())
assert(off <= max);
return std::min(off, max);
}

View File

@ -221,7 +221,8 @@ size_t
ircd::m::media::file::write(const m::room &room,
const m::user::id &user_id,
const const_buffer &content,
const string_view &content_type)
const string_view &content_type,
const string_view &name)
try
{
static const size_t BLK_SZ
@ -256,6 +257,12 @@ try
{ "mime_type", content_type }
});
if(name)
send(room, user_id, "ircd.file.stat.name", "", json::members
{
{ "name", name }
});
size_t off{0}, wrote{0};
while(off < size(content))
{

View File

@ -1156,7 +1156,7 @@ ircd::m::push::rules::defaults{R"(
],
"actions":
[
"notify",
"dont_notify",
{
"set_tweak": "highlight",
"value": false
@ -1177,7 +1177,7 @@ ircd::m::push::rules::defaults{R"(
],
"actions":
[
"notify",
"dont_notify",
{
"set_tweak": "highlight",
"value": false

View File

@ -183,12 +183,6 @@ ircd::m::sync::rooms_polylog(data &data)
if(data.prefetch)
data.user_rooms.prefetch();
if(rooms_polylog_ban)
ret |= _rooms_polylog(data, "ban", phase);
if(data.phased && ret)
return ret;
if(rooms_polylog_join)
ret |= _rooms_polylog(data, "join", phase);
@ -207,6 +201,12 @@ ircd::m::sync::rooms_polylog(data &data)
if(data.phased && ret)
return ret;
if(rooms_polylog_ban)
ret |= _rooms_polylog(data, "ban", phase);
if(data.phased && ret)
return ret;
return ret;
}

View File

@ -12358,7 +12358,7 @@ console_cmd__room__auth(opt &out, const string_view &line)
{
const params param{line, " ",
{
"event_id|room_id", "event_id"
"event_id|room_id", "event_id", "type"
}};
const string_view &p0
@ -12395,18 +12395,27 @@ console_cmd__room__auth(opt &out, const string_view &line)
p0
};
const auto type
{
param["type"]
};
const m::room::auth::chain ac
{
m::index(event_id)
};
ac.for_each([&out](const auto &idx)
ac.for_each([&out, &type]
(const auto &idx)
{
const m::event::fetch event
{
std::nothrow, idx
};
if(type && json::get<"type"_>(event) != type)
return true;
out << idx;
if(event.valid)
out << " " << pretty_oneline(event);
@ -14886,7 +14895,7 @@ console_cmd__feds__auth(opt &out, const string_view &line)
{
const params param{line, " ",
{
"room_id", "event_id"
"room_id", "event_id", "type"
}};
const auto &room_id
@ -14899,30 +14908,73 @@ console_cmd__feds__auth(opt &out, const string_view &line)
param.at("event_id")
};
const auto type
{
param["type"]
};
size_t count[2] {0};
std::set<string_view> origins;
std::map<std::string, std::set<std::string>, std::less<>> grid;
m::feds::opts opts;
opts.op = m::feds::op::auth;
opts.room_id = room_id;
opts.event_id = event_id;
m::feds::execute(opts, [&out](const auto &result)
m::feds::execute(opts, [&]
(const auto &result)
{
count[bool(result.eptr)]++;
if(result.eptr)
return true;
const json::array auth_chain
{
result.object.at("auth_chain")
result.object["auth_chain"]
};
out << "+ " << std::setw(40) << std::left << result.origin;
for(const json::object auth_event : auth_chain)
{
out << " " << unquote(auth_event.at("event_id"));
};
if(type && json::string(auth_event["type"]) != type)
continue;
const json::string event_id
{
auth_event.at("event_id")
};
auto it(grid.lower_bound(event_id));
if(it == end(grid) || it->first != event_id)
it = grid.emplace_hint(it, event_id, std::set<std::string>{});
auto &set(it->second);
const auto iit(set.emplace(result.origin));
origins.emplace(*iit.first);
}
out << std::endl;
return true;
});
size_t i(0);
for(const auto &p : grid)
out << i++ << " " << p.first << std::endl;
for(size_t j(0); j < i; ++j)
out << "| " << std::left << std::setw(2) << j;
out << "|" << std::endl;
for(const auto &origin : origins)
{
for(const auto &p : grid)
out << "| " << (p.second.count(origin)? '+' : ' ') << " ";
out << "| " << origin << std::endl;
}
out
<< '\n'
<< count[0] << ':' << count[1]
<< std::endl;
return true;
}
@ -16553,7 +16605,13 @@ console_cmd__fed__auth(opt &out, const string_view &line)
std::sort(begin(events), end(events));
for(const auto &event : events)
{
if(startswith(param["op"], "m.room."))
if(json::get<"type"_>(event) != param["op"])
continue;
out << pretty_oneline(event) << std::endl;
}
return true;
}

View File

@ -75,7 +75,7 @@ post__upload(client &client,
const size_t written
{
m::media::file::write(room, request.user_id, buf, content_type)
m::media::file::write(room, request.user_id, buf, content_type, filename)
};
char uribuf[256];