►
Description
Today we paired on https://gitlab.com/gitlab-org/gitlab/-/merge_requests/108236
B
I'm,
just
I,
don't
know
if
it's
Marco
or
Raymond
or
someone
that
taught
me
about
the
multiple
desktops
thing
so
because
I
have
so
many
windows
open
and
I
wouldn't
share
my
screen,
I'm
just
going
to
try
and
move
dumping
over
to
my
other
screen.
So
I
can
just
share
that
in
a
minute,
maybe
Marco
while
I'm
messing
around.
Do
you
think
you
could
share
your
screen
just
with
the
Mr
open
and
just
talk,
give
us
a
bit
of
background
and
remind
us
whatever
we're
at.
C
B
Yes,
so
we've
introduced
this
New
Concept
called
namespace
commit
emails
or
we're
sort
of
halfway
through
introducing
it.
Some
of
the
tables
are
there,
but
where
we're
lacking
a
bit
of
the
the
graphql
functionality,
some
of
the
back
ends
there,
but
we're
lacking
a
few
bits
and
pieces,
and
then
we
need
to
start
building
the
front
end.
The
idea
is
that
if
you
contribute
to
multiple
projects,
maybe
your
companies
on
gitlab.com,
but
maybe
you
contribute
to
a
couple
of
Open
Source
projects
on
gitlab.
B
You
might
want
your
company
contributions
to
come
from
your
company
email.
You
might
want
your
open
source
ones
to
come
from
your
private
email.
You
might
even
have
either
some
other
kind
of
business
contracts,
side,
hustle,
whatever
you
want
to
call
it
email.
So
it's
it's
to
be
able
to
kind
of
configure
a
a
default.
If
that's
the
right
term
say
when
you're
using
the
web
IDE
or
using
when
you're
merging
through
the
UI
or
using
a
single
file
editor.
All
of
those
things
will
check
what
your
namespace
commit.
B
Email
is
that's
configured,
and
this
Mr
specifically
was
to
allow
us
to
build
the
front
end.
So
you
can
actually
configure
these
things,
so
we've
got
the
backend
tables
to
store
it,
but
we
need
a
graphql
endpoint
to
be
able
to
to
send
some
data
to
and
say
right,
okay
for
me
or
for
this
user
and
for
this
namespace
use.
This
email
address
does.
D
A
I,
don't
ever
notice
space
differences
when
people
call
things
out
as
being
misaligned
like
I,
don't
know,
I
think
I
just
kind
of
like
don't
it
doesn't.
I
have
no
idea
what
you're
talking
about.
Sometimes.
D
A
I
guess
I
took
a
quick
look
at
this.
It
looks
like
there
was
some
work
on
the
model
to
add
a
new
method
that
grabs
the
email.
A
C
I'm
almost
certain
that
the
implementation
was
there,
we
were
still
only
missing
some
specs.
Oh.
B
So
so
it's
an
opportunity
for
us
to
maybe
just
review
the
Mr,
almost
and
and
kind
of
just
yeah
see
if
there's
just
some
nice
finishing
steps
that
we
can.
D
C
A
And
this
is
stuff:
I
don't
get
to
work
with
on
a
daily
basis,
so
that's
kind
of
fun.
Awesome,
I,.
B
Like
the
sound
of
that
I'm
just
trying
the
rebay
so
should
I
share
my
screen.
Now:
conflicts
yay.
C
C
A
B
B
A
I
saw
it
somewhere,
maybe
in
the
service,
under
the
yeah,
under
service
users,.
A
C
Oh
and
I
think
that
I
have
to
remind
myself.
Where
is
this.
C
C
A
C
C
B
C
B
A
C
C
D
B
We
edit
this
permission,
so
so
that's
project,
namespace
policy
and
have
you
still
got
your
you've
got
your
search
results?
Up
still,
I
mean
it
was
Project
namespace
right,
so
project
names.
C
E
C
A
B
D
B
C
So,
okay,
this
is
the
new
mutation
and
we
have
two
arguments:
the
namespace
ID
and
the
email
ID
that
we
want
to
set
for
the
user
and
the
user
is
coming
from.
C
B
C
Exactly
and
this
mutation
is
returning
the
the
new
link
basically
to
between
the
namespace
and
the
email.
D
C
B
Than
one
authorized
absolutely,
can
you
have
a
look
in
well
how
far.
B
So
my
thinking
is
so
we
we're
not
checking
or
our
way
we're
not
checking
what
was
it
yeah
I
was
going
to
say
we're
checking
something
else
in
here.
Aren't
we
right
we're
checking
admin
user
email
address,
but
at
the
moment,
because
you
can
only
hit
the
mutation
as
the
current
user
I
guess
we
don't
need
to
check
this.
Do
we.
C
B
C
B
C
B
C
That,
then,
we
wouldn't
be
able
to
check
to
use
the
target
user
emails
fine
by.
C
Yeah
cool
cool,
so
we
call
the
service
and
then
return
the
reload,
nothing,
nothing
big
in
here
and
the
find
object
so
that
we
can
find
the
namespace
from
the
name.
Space
ID,
so
I'll
draw
is
fine,
basically
uses
find
object,
go
okay,
mutation
type
only
exposes
the
new
mutation.
Nothing
big
in
here.
This
one
is
used
from
the
service
because
we
try
to
find
okay.
D
C
If
the
basically,
if
the
user
has
already
set
a
custom
email
for
that
specific
namespace,
and
this
one
is
getting
that
basically
looking
at
the
table
and
finding,
if
there's
already
a
record
for
that
namespace
cool,
so
that's
cool
here
we
are
enabling
the
Paul
the
the
right
to
admin,
the
user
email
address,
that's
good
and
here's
the
service.
C
B
B
B
No,
so
this
is
immediately
meaning
we're
going
to
need
to
write
another
test.
Yes,.
A
The
only
other
thing
I
would
note
here
is:
is
this
service
because
we're
almost
doing
like
a
fine
and
then
a
create
or
an
update?
If
the
record
is
found,
there
might
be
like
an
edge
case
where
it's
like
service
run
multiple
times
like
too
close
together,
where
it
might
get
into
a
funky
State
I,
just
like
reviewed
a
database
Mr
where
they
talk
about
using
upsert,
and
that
might
be
something
we
want
to
look
into
here.
C
A
But
that's
only
I
guess:
if
the
email
ID
was
not
provided,
then
it
would
be
removable
I
guess
maybe
that
could
be
the
first
check
and
then,
if
it's
the
email,
ID,
okay,
I,
see
yourself.
Okay,
I
see
what
you're
saying,
but
we
like,
because
I,
let
me
see
if
I
can
find
an
example
for
the
upsert
in
the
code.
There's
nothing
in
our
Docs
and
there
seems
to
be
some
rubocov
rule
about
safe,
binder,
create
by
like
that,
not
being
good
to
do
all
the
time.
So
let
me
see.
B
B
C
C
So
we
find
the
email
from
the
email
ID.
If
it's
provided-
and
this
has
just
changed
slightly
yeah-
then
we
try
to
see
if
the
user
has
already
set
an
email
for
the
specific
namespace
and
if
it
doesn't,
we
try
to
create
one.
C
Otherwise,
if
the
email
for
name
species
set
and
provided
email
ID
is
nil,
will
remove
that.
So
basically,
this
that
removes
the
association.
Otherwise,
if
that
exists,
and
you
provide
a
different
email
ID,
we
update
the
email.
C
Okay,
so
the
remove
namespace
comment.
Email
just
removes
the
record,
the
create
namespace
checks
for
the
email.
So
basically,
if
you
don't
provide
a
valid
email,
ID
or
you
can't
read
the
email,
ID
or.
C
C
And
this
will
just
update.
We
actually
don't
check
if
the
email
is
different.
B
A
I,
don't
know
what
it
does.
There
I
was
trying
to
write
a
comment
about
upsert,
because
I
still
think
that
might
be
something
we
want
to
do
to
create
like
to
avoid
a
weird
case
where
you
might
get
like
a
duplicate
record
error
or
something
we
could
try
it
I,
don't
remember
I
work
in
elasticsearch,
most
of
the
time.
That's
why
I
do
database
reviews
to
try
to
get
more
practice
about
using
database
and
another
Factor
records
smart
enough
to
just
ignore
it.
My.
D
C
A
C
So,
having
said
that,
these
are
only
helper
methods
to
return
the
right
response
to
the
to
the
mutation
itself.
So
nothing
big
in
here.
C
Okay,
yeah,
that
makes
sense
yeah,
also
because
that's
the
only
thing
that
we're
tracking
on
the
mutation
side
so.
B
C
That's
good.
We
checked
for
the
parameters
to
be
valid.
C
Are
invalid,
create
email
to
Global,
ID
returns
of
validation,
error
image
must
be
provided
we
are
providing
it.
B
D
B
C
A
B
C
D
B
B
B
So
what
you're
saying
again
is
what
kind
of
testing
testing
the
I
don't
know
what
you
want
to
call
it
like
the
gem
or
the
library
or
whatever
we
don't.
C
Yeah
and
also
no
yeah
even
providing
null
to
the
namespace.
That's
that
will
fail
because
it's
required
and
if
we
provide
node
to
an
email,
it's
actually
valid
in.
B
C
C
A
I
left
some
comments:
I
don't
know
the
upstart
stuff,
I,
don't
use
very
much
so
I'm,
not
so
sure
about
in
the
service.
What
I've
written
is
not
fully
functional
but
like
at
least
kind
of
show.
A
The
idea
of
if
we
could
somehow
do
the
removal
trick
first
and
then
like
create
a
new
record,
maybe
like
a
validate
that
it's
good
and
then
use
this
up
cert
that
would
at
least
prevent
having,
like
maybe
a
clash
if,
for
some
reason
this
to
serve
two
times,
someone
quickly
is
like
changed
it
twice
and
then
two
things
run
at
the
same
time,
because.
A
It's
kind
of
like
it
updates
or
inserts
a
record
in
a
single
statement,
but
the
problem
is
it
doesn't
do
any
callbacks
or
validations.
So
I,
don't
know
if
you
like
this
needs
that
like
if
this
there
are
validations
that
like
need
to
be.
A
I
mean
I,
put
the
validate
call
in
there,
which
you
can
say
like
if
it's
not
valid
return,
the
error
you
can
handle
that
and
if
it
is
valid,
then
you
can
just
do
the
upsert
trying
to
think
there
is
like
safe
finder,
create,
buy
and
I
keep
getting
feedback
that
they
don't
want
us
to
use
that
anymore.
So
let
me
see
if
I
can
find.
B
D
C
So
this
is
just
checking
for
the
right
permission
to
get
applied
to
the
user
in
different
cases
and
time
pre
diction,
oh
I,
would
need
to
when
user
is
not
an
admin,
their
own
to
be
allowed
okay,
requesting
a
different
user
is
not
an
admin
and
they're
requesting
a
different
user
not
to
be
allowed.
Okay,.
D
B
B
So
if
you've
got
it,
come
for
your
button
in
the
default
configuration
you
don't
have
admin
mode
enabled.
So
it
means
that
if
you're
an
admin,
you
can
do
anything
and
everything.
If
you
enable
admin
mode,
then
you
have
to
actually
switch
to
like
press
a
button
to
go
to
into
admin
mode
in
order
to
be
able
to
do
these
administrative
type
functions.
If
that
makes
sense,
oh.
B
E
C
A
A
C
C
C
D
C
D
C
C
Do
we
have
to
oh
because
that's
not
part
of
the
Json
response
like
it's
not.
Actually,
you
know
that
there
are
two
different
types
of
errors.
A
C
Come
on
yeah,
it's
this
exception.
Yeah.
C
C
B
So
let
me
let
me
put
the
potential
to
do
in
so
that's
requests.
D
C
Okay,
so
when
the
user
cannot,
so
we
are
overriding
the
namespace
ID
in
this
instance-
and
this
is
another
error
that
should-
and
it's
a
different
one,
because
it
what
was
it
in
here,
we
would
get.
C
C
B
C
Exactly
and
when
the
service
returns
an
error,
this
is
this
is
not
a
top
level
error,
so
we
get
both
errors
and
the
namespace
committee
mail.
So
the
field
on
the
graphql
response-
and
here
we
can-
we
can
check
we.
We
know
what
the
error
should
be.
Yep
and.
C
D
B
B
Apple
event,
I
think
it's
like
that.
Yeah.
C
B
C
C
A
B
That's
that's.
To
be
honest,
all
right,
I,
like
I've,
not
been
following
it
myself,
but
in
the
yeah
apple
slack,
Channel
I
saw
like
everyone
going
a
bit
crazy,
so
requested
what
was
going
on.
I.
Think
the
one
that
amused
me
the
most
was
a
picture
of
one
of
them
with
like
a
cracked
screen
on
it,
because
everyone
I
know
like
iPhones,
just
notoriously
everyone
I
know
of
an
iPhone.
The
screen
is
cracked.
B
C
Yeah
this
is
the
service
pack
like
before
we
by
default.
We
add
the
user
to
the
group.
Oh
yeah,
oh
by
the
way
in
this
one
as
well
I
think
it
would
be
a
good.
C
And
here
well,
obviously,
then,
so
we
check
the
execute
when
the
keyword
user
does
not
provider.
Well,
it
should
oh
yeah.
We
don't
have
to
suppose
that
we
are
coming
from
the
mutation.
So
if
someone's
someone
uses
this
service
from
not
from
the
mutation
this,
this
is
making
sure
that
the
execute
yeah
when
the
current
user
is
not
provided.
This
is
going
to
make
sure
that
the
service
itself
Returns
the
error
and
that's
good.
D
C
It
should
okay,
it
would
go
inside
here,
because
no
checking
the
permission
for
a
null
user
will
always
be
false.
Yeah.
D
C
Yeah,
in
fact,
that's
the
same
message:
okay
yep,
when
the
target
user
does
not
have
permission
to
access
the
namespace.
Okay,
we're
checking
that
as
well
when
the
name
Trace
is
not
provided.
We're
checking
that
as
well
email,
ID.
B
C
D
C
Okay,
this
is
coming
to
me.
It
does
not
exist
and
that's
the
other
case
down
there.
Okay
does
not
exist,
it's
it
creates
by
default.
Okay.
So
it's
making
sure
that
the
new
record
is
created
and
persisted
when
the
target
user
is
not
the
current
user.
Okay,
so
we
are
going
to
yeah
at
this
point.
If
we
already
setting
everything
up,
should
we
also
update
the
mutation
to
allow.
B
And
I
I
think
I
definitely
remember
that
there
were
a
couple
of
authorization
checks
and
it
just
wasn't
worth
okay.
You.
B
It's
already
I
can't
exactly
tell,
but
our
10
files,
I
I,
think
it's.
You
know
hundreds
of
lines,
yeah
400
lines
of
code
already
so
I
think
yeah
yeah.
D
C
Okay,
so
when
admin
mode
is
enabled
and
the
user
is
not
the
current
user,
the
user
can
actually
create
the
the
record.
B
C
You
mean
this
context,
yeah.
Well,
it's.
B
B
C
Yes,
yes,
but
when
the
namespace
does
not
exist
and
you
don't
have
the
permission,
we
should
check
that
the
the
service
is
written
in
this
RR.
B
So
you
mean
we
should
check
it
in
both
branches.
We
did
check
that
we
get
the
same
error,
regardless
of
whether
a
namespace
commit
email
exists,.
B
C
C
C
A
B
You
know
what
that's
the
one
reason:
can
you
go
to
the
service
quickly,
Marco.
B
I
think
it's
because
this
Mr
is
so:
oh
no,
it's
actually
also
because
I
canceled
the
pipeline,
but
that's
why
I
love
our
code
coverage
test
coverage,
visualization
I!
Think
that
I
know
that.
Doesn't
you
know
it's
not
infallible?
No
right!
It's!
It's
a
really,
really
really
good
indication
of
whether
we've
got
code
coverage
for
all
the
different
branches.
So
I
find
that
really
helpful.
Awesome
we're
already
over
time,
Marco.
Obviously
you
managed
to
survive
longer.
Then
you
must
be
starving.
C
Oh
no,
actually,
we
already
have
dinner.
It's.