diff --git a/components/dashboard/package.json b/components/dashboard/package.json index 274a91d2cc6158..bfe2ea82e5e265 100644 --- a/components/dashboard/package.json +++ b/components/dashboard/package.json @@ -10,6 +10,7 @@ "@gitpod/gitpod-protocol": "0.1.5", "@gitpod/public-api": "0.1.5", "@gitpod/public-api-common": "0.1.5", + "@radix-ui/react-accordion": "^1.2.1", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-popover": "^1.0.7", diff --git a/components/dashboard/src/Insights.tsx b/components/dashboard/src/Insights.tsx new file mode 100644 index 00000000000000..f6ce940049864b --- /dev/null +++ b/components/dashboard/src/Insights.tsx @@ -0,0 +1,203 @@ +/** + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License.AGPL.txt in the project root for license information. + */ + +import { LoadingState } from "@podkit/loading/LoadingState"; +import { Heading2, Subheading } from "@podkit/typography/Headings"; +import classNames from "classnames"; +import { useCallback, useMemo, useState } from "react"; +import { Accordion } from "./components/accordion/Accordion"; +import Alert from "./components/Alert"; +import Header from "./components/Header"; +import { Item, ItemField, ItemsList } from "./components/ItemsList"; +import { useWorkspaceSessions } from "./data/insights/list-workspace-sessions-query"; +import { WorkspaceSessionGroup } from "./insights/WorkspaceSessionGroup"; +import { gitpodHostUrl } from "./service/service"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@podkit/select/Select"; +import dayjs from "dayjs"; +import { Timestamp } from "@bufbuild/protobuf"; +import { LoadingButton } from "@podkit/buttons/LoadingButton"; +import { TextMuted } from "@podkit/typography/TextMuted"; +import { DownloadInsightsToast } from "./insights/download/DownloadInsights"; +import { useCurrentOrg } from "./data/organizations/orgs-query"; +import { useToast } from "./components/toasts/Toasts"; +import { useTemporaryState } from "./hooks/use-temporary-value"; +import { DownloadIcon } from "lucide-react"; +import { Button } from "@podkit/buttons/Button"; + +export const Insights = () => { + const [prebuildsFilter, setPrebuildsFilter] = useState<"week" | "month" | "year">("week"); + const [upperBound, lowerBound] = useMemo(() => { + const from = dayjs().subtract(1, prebuildsFilter).startOf("day"); + + const fromTimestamp = Timestamp.fromDate(from.toDate()); + const toTimestamp = Timestamp.fromDate(new Date()); + return [fromTimestamp, toTimestamp]; + }, [prebuildsFilter]); + const { + data, + error: errorMessage, + isLoading, + isFetchingNextPage, + hasNextPage, + fetchNextPage, + } = useWorkspaceSessions({ + from: upperBound, + to: lowerBound, + }); + + const hasMoreThanOnePage = (data?.pages.length ?? 0) > 1; + const sessions = useMemo(() => data?.pages.flatMap((p) => p) ?? [], [data]); + const grouped = Object.groupBy(sessions, (ws) => ws.workspace?.id ?? "unknown"); + const [page, setPage] = useState(0); + + return ( + <> +
+
+
+ + +
+ +
+ + {errorMessage && ( + + {errorMessage instanceof Error ? errorMessage.message : "An error occurred."} + + )} + +
+ + + + Type + + + ID + + + User + + + Sessions + + + + {isLoading && ( +
+ + Loading usage... +
+ )} + + {!isLoading && ( + + {Object.entries(grouped).map(([id, sessions]) => { + if (!sessions?.length) { + return null; + } + + return ; + })} + + )} + + {/* No results */} + {!isLoading && sessions.length === 0 && !errorMessage && ( +
+ No sessions found. + + Have you started any + + {" "} + workspaces + {" "} + in the last 30 days or checked your other organizations? + +
+ )} +
+
+ +
+ {hasNextPage ? ( + { + setPage(page + 1); + fetchNextPage(); + }} + loading={isFetchingNextPage} + > + Load more + + ) : ( + hasMoreThanOnePage && All workspace sessions are loaded + )} +
+
+ + ); +}; + +type DownloadUsageProps = { + from: Timestamp; + to: Timestamp; +}; +export const DownloadUsage = ({ from, to }: DownloadUsageProps) => { + const { data: org } = useCurrentOrg(); + const { toast } = useToast(); + // When we start the download, we disable the button for a short time + const [downloadDisabled, setDownloadDisabled] = useTemporaryState(false, 1000); + + const handleDownload = useCallback(async () => { + if (!org) { + return; + } + + setDownloadDisabled(true); + toast( + , + { + autoHide: false, + }, + ); + }, [org, setDownloadDisabled, toast, from, to]); + + return ( + + ); +}; + +export default Insights; diff --git a/components/dashboard/src/app/AppRoutes.tsx b/components/dashboard/src/app/AppRoutes.tsx index e8bf0ba5290f03..19357e8213a54f 100644 --- a/components/dashboard/src/app/AppRoutes.tsx +++ b/components/dashboard/src/app/AppRoutes.tsx @@ -69,6 +69,7 @@ const WorkspacesSearch = React.lazy(() => import(/* webpackPrefetch: true */ ".. const ProjectsSearch = React.lazy(() => import(/* webpackPrefetch: true */ "../admin/ProjectsSearch")); const TeamsSearch = React.lazy(() => import(/* webpackPrefetch: true */ "../admin/TeamsSearch")); const Usage = React.lazy(() => import(/* webpackPrefetch: true */ "../Usage")); +const Insights = React.lazy(() => import(/* webpackPrefetch: true */ "../Insights")); const ConfigurationListPage = React.lazy( () => import(/* webpackPrefetch: true */ "../repositories/list/RepositoryList"), ); @@ -125,7 +126,6 @@ export const AppRoutes = () => { - {/* TODO(gpl): Remove once we don't need the redirect anymore */} { + diff --git a/components/dashboard/src/components/accordion/Accordion.tsx b/components/dashboard/src/components/accordion/Accordion.tsx new file mode 100644 index 00000000000000..328468150c2d58 --- /dev/null +++ b/components/dashboard/src/components/accordion/Accordion.tsx @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License.AGPL.txt in the project root for license information. + */ + +import { cn } from "@podkit/lib/cn"; +import * as AccordionPrimitive from "@radix-ui/react-accordion"; +import { ChevronDown } from "lucide-react"; +import * as React from "react"; + +const Accordion = AccordionPrimitive.Root; + +const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AccordionItem.displayName = "AccordionItem"; + +const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + svg]:rotate-180", + className, + )} + {...props} + > + {children} + + + +)); +AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName; + +const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + +
{children}
+
+)); + +AccordionContent.displayName = AccordionPrimitive.Content.displayName; + +export { Accordion, AccordionContent, AccordionItem, AccordionTrigger }; diff --git a/components/dashboard/src/data/insights/list-workspace-sessions-query.ts b/components/dashboard/src/data/insights/list-workspace-sessions-query.ts new file mode 100644 index 00000000000000..3530eaa35cdd9b --- /dev/null +++ b/components/dashboard/src/data/insights/list-workspace-sessions-query.ts @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License.AGPL.txt in the project root for license information. + */ +import { WorkspaceSession } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { useInfiniteQuery } from "@tanstack/react-query"; +import { workspaceClient } from "../../service/public-api"; +import { useCurrentOrg } from "../organizations/orgs-query"; +import { Timestamp } from "@bufbuild/protobuf"; + +const pageSize = 100; + +type Params = { + from?: Timestamp; + to?: Timestamp; +}; +export const useWorkspaceSessions = ({ from, to }: Params = {}) => { + const { data: org } = useCurrentOrg(); + + const query = useInfiniteQuery({ + queryKey: getAuthProviderDescriptionsQueryKey(org?.id, from, to), + queryFn: async ({ pageParam }) => { + if (!org) { + throw new Error("No org specified"); + } + + const response = await workspaceClient.listWorkspaceSessions({ + organizationId: org.id, + from, + to, + pagination: { + page: pageParam ?? 0, + pageSize, + }, + }); + + return response.workspaceSessions; + }, + getNextPageParam: (lastPage, pages) => { + const hasMore = lastPage.length === pageSize; + return hasMore ? pages.length : undefined; + }, + enabled: !!org, + }); + + return query; +}; + +export const getAuthProviderDescriptionsQueryKey = (orgId?: string, from?: Timestamp, to?: Timestamp) => [ + "workspace-sessions", + { orgId, from, to }, +]; diff --git a/components/dashboard/src/insights/WorkspaceSession.tsx b/components/dashboard/src/insights/WorkspaceSession.tsx new file mode 100644 index 00000000000000..b33911accb03e2 --- /dev/null +++ b/components/dashboard/src/insights/WorkspaceSession.tsx @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License.AGPL.txt in the project root for license information. + */ + +import { WorkspacePhase_Phase, WorkspaceSession } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { displayTime } from "./WorkspaceSessionGroup"; + +type Props = { + session: WorkspaceSession; +}; +export const WorkspaceSessionEntry = ({ session }: Props) => { + const isRunning = session?.workspace?.status?.phase?.name === WorkspacePhase_Phase.RUNNING; + + return ( +
  • + {session.creationTime ? displayTime(session.creationTime) : "n/a"} ( + {session.id.slice(0, 7) || "No instance ID"}){isRunning ? " - running" : ""} +
  • + ); +}; diff --git a/components/dashboard/src/insights/WorkspaceSessionGroup.tsx b/components/dashboard/src/insights/WorkspaceSessionGroup.tsx new file mode 100644 index 00000000000000..f5b6509071ed12 --- /dev/null +++ b/components/dashboard/src/insights/WorkspaceSessionGroup.tsx @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License.AGPL.txt in the project root for license information. + */ + +import { Timestamp } from "@bufbuild/protobuf"; +import { WorkspaceSession, WorkspaceSpec_WorkspaceType } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { AccordionContent, AccordionItem, AccordionTrigger } from "../components/accordion/Accordion"; +import { ReactComponent as UsageIcon } from "../images/usage-default.svg"; +import { toRemoteURL } from "../projects/render-utils"; +import { DisplayName } from "../usage/UsageEntry"; +import { WorkspaceSessionEntry } from "./WorkspaceSession"; +import { displayWorkspaceType } from "./download/download-sessions"; + +type Props = { + id: string; + sessions: WorkspaceSession[]; +}; +export const WorkspaceSessionGroup = ({ id, sessions }: Props) => { + if (!sessions?.length) { + return null; + } + const { workspace, owner } = sessions[0]; + + return ( + +
    +
    + + {displayWorkspaceType(workspace?.spec?.type)} + + + {workspace?.spec?.class ? : "n/a"} + +
    +
    +
    + {workspace?.id} +
    + + {workspace?.metadata?.originalContextUrl && toRemoteURL(workspace.metadata.originalContextUrl)} + +
    +
    + + {workspace?.spec?.type === WorkspaceSpec_WorkspaceType.PREBUILD ? ( +
    + + Gitpod +
    + ) : ( +
    + + {owner?.name} +
    + )} +
    +
    +
    + + {sessions.length} + +
    +
    + +
    +

    Workspace starts:

    +
      + {sessions.map((session) => ( + + ))} +
    +
    +
    +
    + ); +}; + +export const displayTime = (time: Timestamp) => { + const options: Intl.DateTimeFormatOptions = { + day: "numeric", + month: "short", + year: "numeric", + hour: "numeric", + minute: "numeric", + }; + + return time.toDate().toLocaleDateString(undefined, options).replace("at ", ""); +}; diff --git a/components/dashboard/src/insights/download/DownloadInsights.tsx b/components/dashboard/src/insights/download/DownloadInsights.tsx new file mode 100644 index 00000000000000..9a7d3fc4572db6 --- /dev/null +++ b/components/dashboard/src/insights/download/DownloadInsights.tsx @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License.AGPL.txt in the project root for license information. + */ + +import { useCallback, useEffect, useMemo, useState } from "react"; +import { AlertTriangle } from "lucide-react"; +import prettyBytes from "pretty-bytes"; +import { Button } from "@podkit/buttons/Button"; +import { useDownloadSessionsCSV } from "./download-sessions"; +import { Timestamp } from "@bufbuild/protobuf"; +import saveAs from "file-saver"; + +type Props = { + from: Timestamp; + to: Timestamp; + organizationId: string; + organizationName: string; +}; +export const DownloadInsightsToast = ({ organizationId, from, to, organizationName }: Props) => { + const [progress, setProgress] = useState(0); + + const queryArgs = useMemo( + () => ({ + organizationName, + organizationId, + from, + to, + onProgress: setProgress, + }), + [from, organizationId, organizationName, to], + ); + const { data, error, isLoading, abort, remove } = useDownloadSessionsCSV(queryArgs); + + const saveFile = useCallback(() => { + if (!data || !data.blob) { + return; + } + + saveAs(data.blob, data.filename); + }, [data]); + + useEffect(() => { + return () => { + abort(); + remove(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + if (isLoading) { + return ( +
    + Preparing usage export + Exporting page {progress} +
    + ); + } + + if (error) { + return ( +
    + +
    + Error exporting your usage data: +
    {error.message}
    +
    +
    + ); + } + + if (!data || !data.blob || data.count === 0) { + return No usage data for the selected period.; + } + + const readableSize = prettyBytes(data.blob.size); + const formattedCount = Intl.NumberFormat().format(data.count); + + return ( +
    +
    + Usage export complete. +

    + {readableSize} · {formattedCount} {data.count !== 1 ? "entries" : "entry"} exported +

    +
    +
    + +
    +
    + ); +}; diff --git a/components/dashboard/src/insights/download/download-sessions.ts b/components/dashboard/src/insights/download/download-sessions.ts new file mode 100644 index 00000000000000..9ebc314ac99001 --- /dev/null +++ b/components/dashboard/src/insights/download/download-sessions.ts @@ -0,0 +1,226 @@ +/** + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License.AGPL.txt in the project root for license information. + */ + +import { + ListWorkspaceSessionsRequest, + PrebuildInitializer, + WorkspaceSession, + WorkspaceSpec_WorkspaceType, +} from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { workspaceClient } from "../../service/public-api"; +import dayjs from "dayjs"; +import { useQuery, useQueryClient } from "@tanstack/react-query"; +import { useCallback } from "react"; +import { noPersistence } from "../../data/setup"; +import { Timestamp } from "@bufbuild/protobuf"; + +const pageSize = 100; +const maxPages = 100; // safety limit if something goes wrong with pagination + +type GetAllWorkspaceSessionsArgs = Pick & { + signal?: AbortSignal; + onProgress?: (percentage: number) => void; +}; +export const getAllWorkspaceSessions = async ({ + from, + to, + signal, + organizationId, + onProgress, +}: GetAllWorkspaceSessionsArgs): Promise => { + const records: WorkspaceSession[] = []; + let page = 0; + while (!signal?.aborted && page < maxPages) { + const response = await workspaceClient.listWorkspaceSessions( + { + organizationId, + from, + to, + pagination: { + page, + pageSize, + }, + }, + { + signal, + }, + ); + if (response.workspaceSessions.length === 0) { + break; + } + + records.push(...response.workspaceSessions); + onProgress && onProgress(page); + + page = page + 1; + } + + return records; +}; + +type Args = Pick & { + organizationName: string; + signal?: AbortSignal; + onProgress?: (percentage: number) => void; +}; + +export type DownloadUsageCSVResponse = { + blob: Blob | null; + filename: string; + count: number; +}; + +const downloadUsageCSV = async ({ + organizationId, + from, + to, + organizationName, + signal, + onProgress, +}: Args): Promise => { + const start = dayjs(from?.toDate()).format("YYYYMMDD"); + const end = dayjs(to?.toDate()).format("YYYYMMDD"); + const filename = `gitpod-usage-${organizationName}-${start}-${end}.csv`; + + const records = await getAllWorkspaceSessions({ + organizationId, + from, + to, + signal, + onProgress, + }); + + if (records.length === 0) { + return { + blob: null, + filename, + count: 0, + }; + } + + const rows = records.map(transformSessionRecord).filter((r) => !!r); + const fields = Object.keys(rows[0]) as (keyof ReturnType)[]; + + // TODO: look into a lib to handle this more robustly + // CSV Rows + const csvRows = rows.map((row) => { + const rowString = fields + .map((fieldName) => { + const value = row[fieldName]; + if (typeof value === "bigint") { + return value.toString(); + } + + return JSON.stringify(row[fieldName]); + }) + .join(","); + + return rowString; + }); + + // Prepend Header + csvRows.unshift(fields.join(",")); + + const blob = new Blob([`\ufeff${csvRows.join("\n")}`], { + type: "text/csv;charset=utf-8", + }); + + return { + blob, + filename, + count: rows.length, + }; +}; + +export const displayWorkspaceType = (type?: WorkspaceSpec_WorkspaceType) => { + switch (type) { + case WorkspaceSpec_WorkspaceType.PREBUILD: + return "prebuild" as const; + case WorkspaceSpec_WorkspaceType.REGULAR: + return "workspace" as const; + default: + return "unknown" as const; + } +}; + +const displayTime = (timestamp?: Timestamp) => { + if (!timestamp) { + return ""; + } + + return timestamp.toDate().toISOString(); +}; + +export const transformSessionRecord = (session: WorkspaceSession) => { + const initializerType = session.workspace?.spec?.initializer?.specs; + const prebuildInitializer = initializerType?.find((i) => i.spec.case === "prebuild")?.spec.value as + | PrebuildInitializer + | undefined; + + const row = { + id: session.id, + + creationTime: displayTime(session.creationTime), + deployedTime: displayTime(session.deployedTime), + startedTime: displayTime(session.startedTime), + stoppingTime: displayTime(session.stoppingTime), + stoppedTime: displayTime(session.stoppedTime), + + // draft: session.draft ? "true" : "false", // should we indicate here somehow that the ws is still running? + workspaceID: session?.workspace?.id, + configurationID: session.workspace?.metadata?.configurationId, + prebuildID: prebuildInitializer?.prebuildId, + userID: session.owner?.id, + userName: session.owner?.name, + + contextURL: session.workspace?.metadata?.originalContextUrl, + contextURL_cloneURL: session.context?.repository?.cloneUrl, + contextURLSegment_1: session?.context?.repository?.owner, + contextURLSegment_2: session?.context?.repository?.name, + + workspaceType: displayWorkspaceType(session.workspace?.spec?.type), + workspaceClass: session.workspace?.spec?.class, + + workspaceImageSize: session.metrics?.workspaceImageSize, + workspaceImageTotalSize: session.metrics?.totalImageSize, + + timeout: session.workspace?.spec?.timeout?.inactivity?.seconds, + editor: session.workspace?.spec?.editor?.name, + editorVersion: session.workspace?.spec?.editor?.version, // indicates whether user selected the stable or latest editor release channel + }; + + return row; +}; + +export const useDownloadSessionsCSV = (args: Args) => { + const client = useQueryClient(); + const key = getDownloadUsageCSVQueryKey(args); + + const abort = useCallback(() => { + client.removeQueries([key]); + }, [client, key]); + + const query = useQuery( + key, + async ({ signal }) => { + return downloadUsageCSV({ ...args, signal }); + }, + { + retry: false, + cacheTime: 0, + staleTime: 0, + }, + ); + + return { + ...query, + abort, + }; +}; + +const getDownloadUsageCSVQueryKey = (args: Args) => { + return noPersistence(["usage-export", args]); +}; diff --git a/components/dashboard/src/usage/UsageEntry.tsx b/components/dashboard/src/usage/UsageEntry.tsx index ab98daf269379b..1374ad963d3c82 100644 --- a/components/dashboard/src/usage/UsageEntry.tsx +++ b/components/dashboard/src/usage/UsageEntry.tsx @@ -83,7 +83,7 @@ export const UsageEntry: FC = ({ usage }) => { ); }; -const DisplayName: FC<{ workspaceClass: string }> = ({ workspaceClass }) => { +export const DisplayName: FC<{ workspaceClass: string }> = ({ workspaceClass }) => { const supportedClasses = useWorkspaceClasses(); const workspaceDisplayName = supportedClasses.data?.find((wc) => wc.id === workspaceClass)?.displayName; @@ -118,7 +118,7 @@ const getMinutes = (usage: Usage) => { return inMinutes + " min"; }; -const displayTime = (time: string | number) => { +export const displayTime = (time: string | number) => { const options: Intl.DateTimeFormatOptions = { day: "numeric", month: "short", diff --git a/components/dashboard/src/usage/UsageView.tsx b/components/dashboard/src/usage/UsageView.tsx index eb5753f3fa9eaa..14ca4f13d0887b 100644 --- a/components/dashboard/src/usage/UsageView.tsx +++ b/components/dashboard/src/usage/UsageView.tsx @@ -73,7 +73,7 @@ export const UsageView: FC = ({ attributionId }) => { [updatePageParams], ); - let errorMessage = useMemo(() => { + const errorMessage = useMemo(() => { let errorMessage = ""; if (usagePage.error) { @@ -87,7 +87,7 @@ export const UsageView: FC = ({ attributionId }) => { return errorMessage; }, [usagePage.error]); - const usageEntries = usagePage.data?.usageEntriesList || []; + const usageEntries = usagePage.data?.usageEntriesList ?? []; const readableSchedulerDuration = useMemo(() => { const intervalMinutes = usagePage.data?.ledgerIntervalMinutes; @@ -95,7 +95,7 @@ export const UsageView: FC = ({ attributionId }) => { return ""; } - return `${intervalMinutes} minute${intervalMinutes !== 1 ? "s" : "" }`; + return `${intervalMinutes} minute${intervalMinutes !== 1 ? "s" : ""}`; }, [usagePage.data]); return ( diff --git a/components/dashboard/src/usage/download/DownloadUsage.tsx b/components/dashboard/src/usage/download/DownloadUsage.tsx index ea4644b6e41060..67095723e60a2e 100644 --- a/components/dashboard/src/usage/download/DownloadUsage.tsx +++ b/components/dashboard/src/usage/download/DownloadUsage.tsx @@ -61,7 +61,6 @@ export const DownloadUsage: FC = ({ attributionId, startDate, endDate }) type DownloadUsageToastProps = Props & { orgName: string; }; - const DownloadUsageToast: FC = ({ attributionId, endDate, startDate, orgName }) => { const [progress, setProgress] = useState(0); diff --git a/components/dashboard/src/usage/download/download-usage-csv.ts b/components/dashboard/src/usage/download/download-usage-csv.ts index 6d4ef4a85077e8..37e64c6db58768 100644 --- a/components/dashboard/src/usage/download/download-usage-csv.ts +++ b/components/dashboard/src/usage/download/download-usage-csv.ts @@ -9,7 +9,7 @@ import dayjs from "dayjs"; import { useQuery, useQueryClient } from "@tanstack/react-query"; import { ListUsageRequest } from "@gitpod/gitpod-protocol/lib/usage"; import { getAllUsageRecords } from "./get-usage-records"; -import { UsageCSVRow, transformUsageRecord } from "./transform-usage-record"; +import { transformUsageRecord, UsageCSVRow } from "./transform-usage-record"; import { noPersistence } from "../../data/setup"; type Args = Pick & { @@ -52,7 +52,7 @@ const downloadUsageCSV = async ({ }; } - const rows = records.map(transformUsageRecord).filter(Boolean) as UsageCSVRow[]; + const rows = records.map(transformUsageRecord).filter((r) => !!r); const fields = Object.keys(rows[0]) as (keyof UsageCSVRow)[]; // TODO: look into a lib to handle this more robustly diff --git a/components/dashboard/tailwind.config.js b/components/dashboard/tailwind.config.js index e149dba5709d03..8227f398e7fde1 100644 --- a/components/dashboard/tailwind.config.js +++ b/components/dashboard/tailwind.config.js @@ -106,12 +106,22 @@ module.exports = { "0%": { opacity: "0" }, "100%": { opacity: "1" }, }, + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, }, animation: { "toast-in-right": "toast-in-right 0.3s ease-in-out", "fade-in": "fade-in 3s linear", "fade-in-fast": "fade-in .3s ease-in-out", "spin-slow": "spin 2s linear infinite", + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", }, transitionProperty: { width: "width", diff --git a/components/gitpod-db/src/typeorm/workspace-db-impl.ts b/components/gitpod-db/src/typeorm/workspace-db-impl.ts index 46bcfa1de9c072..9e92a8038d433c 100644 --- a/components/gitpod-db/src/typeorm/workspace-db-impl.ts +++ b/components/gitpod-db/src/typeorm/workspace-db-impl.ts @@ -469,8 +469,8 @@ export class TypeORMWorkspaceDBImpl extends TransactionalDBImpl imp .andWhere("wsi.creationTime >= :periodStart", { periodStart: periodStart.toISOString() }) .andWhere("wsi.creationTime <= :periodEnd", { periodEnd: periodEnd.toISOString() }) .orderBy("wsi.creationTime", "DESC") - .offset(offset) - .limit(limit) + .skip(offset) + .take(limit) .getMany(); const resultSessions: { instance: WorkspaceInstance; workspace: Workspace }[] = []; diff --git a/components/public-api/gitpod/v1/workspace.proto b/components/public-api/gitpod/v1/workspace.proto index 71734784471cfa..1b8f373ec2e804 100644 --- a/components/public-api/gitpod/v1/workspace.proto +++ b/components/public-api/gitpod/v1/workspace.proto @@ -326,10 +326,10 @@ message WorkspaceMetadata { message WorkspaceSpec { // Timeout configures the workspace timeout message Timeout { - // inacitivity is the maximum time of inactivity before the workspace is + // inactivity is the maximum time of inactivity before the workspace is // stopped or paused google.protobuf.Duration inactivity = 1; - // inacitivity is the maximum time of disconnection before the workspace is + // disconnected is the maximum time of disconnection before the workspace is // stopped or paused set to zero to disable. google.protobuf.Duration disconnected = 2; // maximum lifetime of the workspace @@ -362,7 +362,7 @@ message WorkspaceSpec { // initializer configures how the workspace is to be initialized WorkspaceInitializer initializer = 1; - // Type denots the kind of workspace we ought to start + // Type denotes the kind of workspace we ought to start WorkspaceType type = 2; // ports is the set of ports which ought to be exposed to the internet @@ -378,7 +378,7 @@ message WorkspaceSpec { // Timeout configures the workspace timeout Timeout timeout = 6; - // admission controlls who can access the workspace and its ports. + // admission controls who can access the workspace and its ports. AdmissionLevel admission = 7; // Class denotes the class of the workspace we ought to start @@ -440,8 +440,8 @@ message WorkspaceStatus { } // version of the status update. Workspace instances themselves are - // unversioned, but their statuus has different versions. The value of this - // field has no semantic meaning (e.g. don't interpret it as as a timestemp), + // unversioned, but their status has different versions. The value of this + // field has no semantic meaning (e.g. don't interpret it as as a timestamp), // but it can be used to impose a partial order. If a.status_version < // b.status_version then a was the status before b. uint64 status_version = 1; @@ -557,7 +557,7 @@ message WorkspacePhase { // Pending means the workspace does not yet consume resources in the // cluster, but rather is looking for some space within the cluster. If for - // example the cluster needs to scale up to accomodate the workspace, the + // example the cluster needs to scale up to accommodate the workspace, the // workspace will be in Pending state until that happened. PHASE_PENDING = 3; @@ -768,7 +768,7 @@ message UpdateWorkspaceRequest { // timeout configures the workspace timeout optional UpdateTimeout timeout = 1; - // admission controlls who can access the workspace and its ports. + // admission controls who can access the workspace and its ports. optional AdmissionLevel admission = 2; // Note(cw): repeated fields have implicit presence. There's a difference @@ -884,6 +884,55 @@ message WorkspaceSnapshot { } message WorkspaceSession { + message Owner { + // id is the ID of the user who created the workspace + string id = 1; + + // name is the full name of the user who created the workspace + string name = 2; + + // avatar_url is the URL of the user's avatar + string avatar_url = 3; + } + + // WorkspaceContext is the git context from which the workspace is created + message WorkspaceContext { + enum RefType { + REF_TYPE_UNSPECIFIED = 0; + REF_TYPE_BRANCH = 1; + REF_TYPE_TAG = 2; + REF_TYPE_REVISION = 3; + } + + message Repository { + // clone_url is the repository url as you would pass it to "git clone". + string clone_url = 1; + + // host is the host of the SCM + string host = 2; + + // owner is the owner of the repository + string owner = 3; + // name is the name of the repository + string name = 4; + } + + // path is the path of the context (the path following the base repository URL) + string path = 1; + + // ref is the branch or tag name of the repository + string ref = 2; + + // ref_type is the type of the ref + RefType ref_type = 3; + + // revision is the commit hash of the context + string revision = 4; + + // repository is the repository of the context + Repository repository = 5; + } + message Metrics { // workspace_image_size is the size of the workspace image in bytes int64 workspace_image_size = 1; @@ -903,4 +952,6 @@ message WorkspaceSession { google.protobuf.Timestamp stopped_time = 7; Metrics metrics = 8; + Owner owner = 9; + WorkspaceContext context = 10; } diff --git a/components/public-api/go/v1/workspace.pb.go b/components/public-api/go/v1/workspace.pb.go index 4299bc3e255776..20230c93b7f849 100644 --- a/components/public-api/go/v1/workspace.pb.go +++ b/components/public-api/go/v1/workspace.pb.go @@ -306,7 +306,7 @@ const ( WorkspacePhase_PHASE_IMAGEBUILD WorkspacePhase_Phase = 2 // Pending means the workspace does not yet consume resources in the // cluster, but rather is looking for some space within the cluster. If for - // example the cluster needs to scale up to accomodate the workspace, the + // example the cluster needs to scale up to accommodate the workspace, the // workspace will be in Pending state until that happened. WorkspacePhase_PHASE_PENDING WorkspacePhase_Phase = 3 // Creating means the workspace is currently being created. That includes @@ -510,6 +510,58 @@ func (GitInitializer_AuthMethod) EnumDescriptor() ([]byte, []int) { return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{30, 1} } +type WorkspaceSession_WorkspaceContext_RefType int32 + +const ( + WorkspaceSession_WorkspaceContext_REF_TYPE_UNSPECIFIED WorkspaceSession_WorkspaceContext_RefType = 0 + WorkspaceSession_WorkspaceContext_REF_TYPE_BRANCH WorkspaceSession_WorkspaceContext_RefType = 1 + WorkspaceSession_WorkspaceContext_REF_TYPE_TAG WorkspaceSession_WorkspaceContext_RefType = 2 + WorkspaceSession_WorkspaceContext_REF_TYPE_REVISION WorkspaceSession_WorkspaceContext_RefType = 3 +) + +// Enum value maps for WorkspaceSession_WorkspaceContext_RefType. +var ( + WorkspaceSession_WorkspaceContext_RefType_name = map[int32]string{ + 0: "REF_TYPE_UNSPECIFIED", + 1: "REF_TYPE_BRANCH", + 2: "REF_TYPE_TAG", + 3: "REF_TYPE_REVISION", + } + WorkspaceSession_WorkspaceContext_RefType_value = map[string]int32{ + "REF_TYPE_UNSPECIFIED": 0, + "REF_TYPE_BRANCH": 1, + "REF_TYPE_TAG": 2, + "REF_TYPE_REVISION": 3, + } +) + +func (x WorkspaceSession_WorkspaceContext_RefType) Enum() *WorkspaceSession_WorkspaceContext_RefType { + p := new(WorkspaceSession_WorkspaceContext_RefType) + *p = x + return p +} + +func (x WorkspaceSession_WorkspaceContext_RefType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (WorkspaceSession_WorkspaceContext_RefType) Descriptor() protoreflect.EnumDescriptor { + return file_gitpod_v1_workspace_proto_enumTypes[8].Descriptor() +} + +func (WorkspaceSession_WorkspaceContext_RefType) Type() protoreflect.EnumType { + return &file_gitpod_v1_workspace_proto_enumTypes[8] +} + +func (x WorkspaceSession_WorkspaceContext_RefType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use WorkspaceSession_WorkspaceContext_RefType.Descriptor instead. +func (WorkspaceSession_WorkspaceContext_RefType) EnumDescriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{51, 1, 0} +} + type UpdateWorkspacePortRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1959,7 +2011,7 @@ type WorkspaceSpec struct { // initializer configures how the workspace is to be initialized Initializer *WorkspaceInitializer `protobuf:"bytes,1,opt,name=initializer,proto3" json:"initializer,omitempty"` - // Type denots the kind of workspace we ought to start + // Type denotes the kind of workspace we ought to start Type WorkspaceSpec_WorkspaceType `protobuf:"varint,2,opt,name=type,proto3,enum=gitpod.v1.WorkspaceSpec_WorkspaceType" json:"type,omitempty"` // ports is the set of ports which ought to be exposed to the internet Ports []*WorkspacePort `protobuf:"bytes,3,rep,name=ports,proto3" json:"ports,omitempty"` @@ -1970,7 +2022,7 @@ type WorkspaceSpec struct { Git *WorkspaceSpec_GitSpec `protobuf:"bytes,5,opt,name=git,proto3" json:"git,omitempty"` // Timeout configures the workspace timeout Timeout *WorkspaceSpec_Timeout `protobuf:"bytes,6,opt,name=timeout,proto3" json:"timeout,omitempty"` - // admission controlls who can access the workspace and its ports. + // admission controls who can access the workspace and its ports. Admission AdmissionLevel `protobuf:"varint,7,opt,name=admission,proto3,enum=gitpod.v1.AdmissionLevel" json:"admission,omitempty"` // Class denotes the class of the workspace we ought to start Class string `protobuf:"bytes,8,opt,name=class,proto3" json:"class,omitempty"` @@ -2120,8 +2172,8 @@ type WorkspaceStatus struct { unknownFields protoimpl.UnknownFields // version of the status update. Workspace instances themselves are - // unversioned, but their statuus has different versions. The value of this - // field has no semantic meaning (e.g. don't interpret it as as a timestemp), + // unversioned, but their status has different versions. The value of this + // field has no semantic meaning (e.g. don't interpret it as as a timestamp), // but it can be used to impose a partial order. If a.status_version < // b.status_version then a was the status before b. StatusVersion uint64 `protobuf:"varint,1,opt,name=status_version,json=statusVersion,proto3" json:"status_version,omitempty"` @@ -3740,14 +3792,16 @@ type WorkspaceSession struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Workspace *Workspace `protobuf:"bytes,2,opt,name=workspace,proto3" json:"workspace,omitempty"` - CreationTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` - DeployedTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=deployed_time,json=deployedTime,proto3" json:"deployed_time,omitempty"` - StartedTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=started_time,json=startedTime,proto3" json:"started_time,omitempty"` - StoppingTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=stopping_time,json=stoppingTime,proto3" json:"stopping_time,omitempty"` - StoppedTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=stopped_time,json=stoppedTime,proto3" json:"stopped_time,omitempty"` - Metrics *WorkspaceSession_Metrics `protobuf:"bytes,8,opt,name=metrics,proto3" json:"metrics,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Workspace *Workspace `protobuf:"bytes,2,opt,name=workspace,proto3" json:"workspace,omitempty"` + CreationTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` + DeployedTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=deployed_time,json=deployedTime,proto3" json:"deployed_time,omitempty"` + StartedTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=started_time,json=startedTime,proto3" json:"started_time,omitempty"` + StoppingTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=stopping_time,json=stoppingTime,proto3" json:"stopping_time,omitempty"` + StoppedTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=stopped_time,json=stoppedTime,proto3" json:"stopped_time,omitempty"` + Metrics *WorkspaceSession_Metrics `protobuf:"bytes,8,opt,name=metrics,proto3" json:"metrics,omitempty"` + Owner *WorkspaceSession_Owner `protobuf:"bytes,9,opt,name=owner,proto3" json:"owner,omitempty"` + Context *WorkspaceSession_WorkspaceContext `protobuf:"bytes,10,opt,name=context,proto3" json:"context,omitempty"` } func (x *WorkspaceSession) Reset() { @@ -3838,6 +3892,20 @@ func (x *WorkspaceSession) GetMetrics() *WorkspaceSession_Metrics { return nil } +func (x *WorkspaceSession) GetOwner() *WorkspaceSession_Owner { + if x != nil { + return x.Owner + } + return nil +} + +func (x *WorkspaceSession) GetContext() *WorkspaceSession_WorkspaceContext { + if x != nil { + return x.Context + } + return nil +} + type CreateAndStartWorkspaceRequest_ContextURL struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3910,10 +3978,10 @@ type WorkspaceSpec_Timeout struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // inacitivity is the maximum time of inactivity before the workspace is + // inactivity is the maximum time of inactivity before the workspace is // stopped or paused Inactivity *durationpb.Duration `protobuf:"bytes,1,opt,name=inactivity,proto3" json:"inactivity,omitempty"` - // inacitivity is the maximum time of disconnection before the workspace is + // disconnected is the maximum time of disconnection before the workspace is // stopped or paused set to zero to disable. Disconnected *durationpb.Duration `protobuf:"bytes,2,opt,name=disconnected,proto3" json:"disconnected,omitempty"` // maximum lifetime of the workspace @@ -4552,7 +4620,7 @@ type UpdateWorkspaceRequest_UpdateWorkspaceSpec struct { // timeout configures the workspace timeout Timeout *UpdateWorkspaceRequest_UpdateTimeout `protobuf:"bytes,1,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` - // admission controlls who can access the workspace and its ports. + // admission controls who can access the workspace and its ports. Admission *AdmissionLevel `protobuf:"varint,2,opt,name=admission,proto3,enum=gitpod.v1.AdmissionLevel,oneof" json:"admission,omitempty"` // Note(cw): repeated fields have implicit presence. There's a difference // between passing an empty list or nothing. @@ -4612,6 +4680,157 @@ func (x *UpdateWorkspaceRequest_UpdateWorkspaceSpec) GetSshPublicKeys() []string return nil } +type WorkspaceSession_Owner struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the ID of the user who created the workspace + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name is the full name of the user who created the workspace + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // avatar_url is the URL of the user's avatar + AvatarUrl string `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` +} + +func (x *WorkspaceSession_Owner) Reset() { + *x = WorkspaceSession_Owner{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceSession_Owner) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceSession_Owner) ProtoMessage() {} + +func (x *WorkspaceSession_Owner) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[65] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkspaceSession_Owner.ProtoReflect.Descriptor instead. +func (*WorkspaceSession_Owner) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{51, 0} +} + +func (x *WorkspaceSession_Owner) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *WorkspaceSession_Owner) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *WorkspaceSession_Owner) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +// WorkspaceContext is the git context from which the workspace is created +type WorkspaceSession_WorkspaceContext struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // path is the path of the context (the path following the base repository URL) + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // ref is the branch or tag name of the repository + Ref string `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` + // ref_type is the type of the ref + RefType WorkspaceSession_WorkspaceContext_RefType `protobuf:"varint,3,opt,name=ref_type,json=refType,proto3,enum=gitpod.v1.WorkspaceSession_WorkspaceContext_RefType" json:"ref_type,omitempty"` + // revision is the commit hash of the context + Revision string `protobuf:"bytes,4,opt,name=revision,proto3" json:"revision,omitempty"` + // repository is the repository of the context + Repository *WorkspaceSession_WorkspaceContext_Repository `protobuf:"bytes,5,opt,name=repository,proto3" json:"repository,omitempty"` +} + +func (x *WorkspaceSession_WorkspaceContext) Reset() { + *x = WorkspaceSession_WorkspaceContext{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceSession_WorkspaceContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceSession_WorkspaceContext) ProtoMessage() {} + +func (x *WorkspaceSession_WorkspaceContext) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[66] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkspaceSession_WorkspaceContext.ProtoReflect.Descriptor instead. +func (*WorkspaceSession_WorkspaceContext) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{51, 1} +} + +func (x *WorkspaceSession_WorkspaceContext) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *WorkspaceSession_WorkspaceContext) GetRef() string { + if x != nil { + return x.Ref + } + return "" +} + +func (x *WorkspaceSession_WorkspaceContext) GetRefType() WorkspaceSession_WorkspaceContext_RefType { + if x != nil { + return x.RefType + } + return WorkspaceSession_WorkspaceContext_REF_TYPE_UNSPECIFIED +} + +func (x *WorkspaceSession_WorkspaceContext) GetRevision() string { + if x != nil { + return x.Revision + } + return "" +} + +func (x *WorkspaceSession_WorkspaceContext) GetRepository() *WorkspaceSession_WorkspaceContext_Repository { + if x != nil { + return x.Repository + } + return nil +} + type WorkspaceSession_Metrics struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4626,7 +4845,7 @@ type WorkspaceSession_Metrics struct { func (x *WorkspaceSession_Metrics) Reset() { *x = WorkspaceSession_Metrics{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_workspace_proto_msgTypes[65] + mi := &file_gitpod_v1_workspace_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4639,7 +4858,7 @@ func (x *WorkspaceSession_Metrics) String() string { func (*WorkspaceSession_Metrics) ProtoMessage() {} func (x *WorkspaceSession_Metrics) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_workspace_proto_msgTypes[65] + mi := &file_gitpod_v1_workspace_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4652,7 +4871,7 @@ func (x *WorkspaceSession_Metrics) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceSession_Metrics.ProtoReflect.Descriptor instead. func (*WorkspaceSession_Metrics) Descriptor() ([]byte, []int) { - return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{51, 0} + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{51, 2} } func (x *WorkspaceSession_Metrics) GetWorkspaceImageSize() int64 { @@ -4669,6 +4888,81 @@ func (x *WorkspaceSession_Metrics) GetTotalImageSize() int64 { return 0 } +type WorkspaceSession_WorkspaceContext_Repository struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // clone_url is the repository url as you would pass it to "git clone". + CloneUrl string `protobuf:"bytes,1,opt,name=clone_url,json=cloneUrl,proto3" json:"clone_url,omitempty"` + // host is the host of the SCM + Host string `protobuf:"bytes,2,opt,name=host,proto3" json:"host,omitempty"` + // owner is the owner of the repository + Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + // name is the name of the repository + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *WorkspaceSession_WorkspaceContext_Repository) Reset() { + *x = WorkspaceSession_WorkspaceContext_Repository{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceSession_WorkspaceContext_Repository) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceSession_WorkspaceContext_Repository) ProtoMessage() {} + +func (x *WorkspaceSession_WorkspaceContext_Repository) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[68] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkspaceSession_WorkspaceContext_Repository.ProtoReflect.Descriptor instead. +func (*WorkspaceSession_WorkspaceContext_Repository) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{51, 1, 0} +} + +func (x *WorkspaceSession_WorkspaceContext_Repository) GetCloneUrl() string { + if x != nil { + return x.CloneUrl + } + return "" +} + +func (x *WorkspaceSession_WorkspaceContext_Repository) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *WorkspaceSession_WorkspaceContext_Repository) GetOwner() string { + if x != nil { + return x.Owner + } + return "" +} + +func (x *WorkspaceSession_WorkspaceContext_Repository) GetName() string { + if x != nil { + return x.Name + } + return "" +} + var File_gitpod_v1_workspace_proto protoreflect.FileDescriptor var file_gitpod_v1_workspace_proto_rawDesc = []byte{ @@ -5338,7 +5632,7 @@ var file_gitpod_v1_workspace_proto_rawDesc = []byte{ 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xbd, 0x04, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xd7, 0x09, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, @@ -5367,144 +5661,186 @@ var file_gitpod_v1_workspace_proto_rawDesc = []byte{ 0x12, 0x3d, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, - 0x65, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x10, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, - 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x4d, - 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, 0x4e, - 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x4d, - 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, 0x45, - 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x32, 0xd3, 0x0e, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, - 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x6b, 0x0a, 0x14, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, - 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, 0x0e, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x20, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x5a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, - 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, - 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x61, 0x72, - 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x21, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, - 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, - 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x12, 0x1f, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, - 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, - 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, + 0x37, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x4f, 0x77, 0x6e, 0x65, + 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x1a, 0x4a, 0x0a, 0x05, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x1a, 0xca, 0x03, 0x0a, + 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x4f, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x52, 0x65, 0x66, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x07, 0x72, 0x65, 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x1a, 0x67, 0x0a, + 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x61, 0x0a, 0x07, 0x52, 0x65, 0x66, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x46, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, + 0x45, 0x46, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x52, 0x41, 0x4e, 0x43, 0x48, 0x10, 0x01, + 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x46, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x41, 0x47, + 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x46, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, + 0x45, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x1a, 0x65, 0x0a, 0x07, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, + 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, + 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, + 0x02, 0x32, 0xd3, 0x0e, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x14, 0x57, 0x61, 0x74, + 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, + 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x6c, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, + 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, + 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, + 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x75, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, + 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, + 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, + 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, - 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, - 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, + 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, + 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, + 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, + 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x57, 0x61, 0x69, 0x74, + 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, - 0x0a, 0x18, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x25, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x51, 0x0a, - 0x16, 0x69, 0x6f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, + 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x66, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x51, 0x0a, 0x16, 0x69, 0x6f, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -5519,8 +5855,8 @@ func file_gitpod_v1_workspace_proto_rawDescGZIP() []byte { return file_gitpod_v1_workspace_proto_rawDescData } -var file_gitpod_v1_workspace_proto_enumTypes = make([]protoimpl.EnumInfo, 8) -var file_gitpod_v1_workspace_proto_msgTypes = make([]protoimpl.MessageInfo, 66) +var file_gitpod_v1_workspace_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_gitpod_v1_workspace_proto_msgTypes = make([]protoimpl.MessageInfo, 69) var file_gitpod_v1_workspace_proto_goTypes = []interface{}{ (AdmissionLevel)(0), // 0: gitpod.v1.AdmissionLevel (GetWorkspaceDefaultImageResponse_Source)(0), // 1: gitpod.v1.GetWorkspaceDefaultImageResponse.Source @@ -5530,197 +5866,205 @@ var file_gitpod_v1_workspace_proto_goTypes = []interface{}{ (WorkspacePhase_Phase)(0), // 5: gitpod.v1.WorkspacePhase.Phase (GitInitializer_CloneTargetMode)(0), // 6: gitpod.v1.GitInitializer.CloneTargetMode (GitInitializer_AuthMethod)(0), // 7: gitpod.v1.GitInitializer.AuthMethod - (*UpdateWorkspacePortRequest)(nil), // 8: gitpod.v1.UpdateWorkspacePortRequest - (*UpdateWorkspacePortResponse)(nil), // 9: gitpod.v1.UpdateWorkspacePortResponse - (*GetWorkspaceRequest)(nil), // 10: gitpod.v1.GetWorkspaceRequest - (*GetWorkspaceResponse)(nil), // 11: gitpod.v1.GetWorkspaceResponse - (*WatchWorkspaceStatusRequest)(nil), // 12: gitpod.v1.WatchWorkspaceStatusRequest - (*WatchWorkspaceStatusResponse)(nil), // 13: gitpod.v1.WatchWorkspaceStatusResponse - (*ListWorkspacesRequest)(nil), // 14: gitpod.v1.ListWorkspacesRequest - (*ListWorkspacesResponse)(nil), // 15: gitpod.v1.ListWorkspacesResponse - (*ListWorkspaceSessionsRequest)(nil), // 16: gitpod.v1.ListWorkspaceSessionsRequest - (*ListWorkspaceSessionsResponse)(nil), // 17: gitpod.v1.ListWorkspaceSessionsResponse - (*CreateAndStartWorkspaceRequest)(nil), // 18: gitpod.v1.CreateAndStartWorkspaceRequest - (*CreateAndStartWorkspaceResponse)(nil), // 19: gitpod.v1.CreateAndStartWorkspaceResponse - (*StartWorkspaceRequest)(nil), // 20: gitpod.v1.StartWorkspaceRequest - (*StartWorkspaceResponse)(nil), // 21: gitpod.v1.StartWorkspaceResponse - (*GetWorkspaceDefaultImageRequest)(nil), // 22: gitpod.v1.GetWorkspaceDefaultImageRequest - (*GetWorkspaceDefaultImageResponse)(nil), // 23: gitpod.v1.GetWorkspaceDefaultImageResponse - (*SendHeartBeatRequest)(nil), // 24: gitpod.v1.SendHeartBeatRequest - (*SendHeartBeatResponse)(nil), // 25: gitpod.v1.SendHeartBeatResponse - (*GetWorkspaceOwnerTokenRequest)(nil), // 26: gitpod.v1.GetWorkspaceOwnerTokenRequest - (*GetWorkspaceOwnerTokenResponse)(nil), // 27: gitpod.v1.GetWorkspaceOwnerTokenResponse - (*GetWorkspaceEditorCredentialsRequest)(nil), // 28: gitpod.v1.GetWorkspaceEditorCredentialsRequest - (*GetWorkspaceEditorCredentialsResponse)(nil), // 29: gitpod.v1.GetWorkspaceEditorCredentialsResponse - (*Workspace)(nil), // 30: gitpod.v1.Workspace - (*WorkspaceMetadata)(nil), // 31: gitpod.v1.WorkspaceMetadata - (*WorkspaceSpec)(nil), // 32: gitpod.v1.WorkspaceSpec - (*WorkspaceStatus)(nil), // 33: gitpod.v1.WorkspaceStatus - (*WorkspacePort)(nil), // 34: gitpod.v1.WorkspacePort - (*WorkspaceGitStatus)(nil), // 35: gitpod.v1.WorkspaceGitStatus - (*WorkspacePhase)(nil), // 36: gitpod.v1.WorkspacePhase - (*WorkspaceInitializer)(nil), // 37: gitpod.v1.WorkspaceInitializer - (*GitInitializer)(nil), // 38: gitpod.v1.GitInitializer - (*SnapshotInitializer)(nil), // 39: gitpod.v1.SnapshotInitializer - (*PrebuildInitializer)(nil), // 40: gitpod.v1.PrebuildInitializer - (*FileDownloadInitializer)(nil), // 41: gitpod.v1.FileDownloadInitializer - (*GitStatus)(nil), // 42: gitpod.v1.GitStatus - (*UpdateWorkspaceRequest)(nil), // 43: gitpod.v1.UpdateWorkspaceRequest - (*UpdateWorkspaceResponse)(nil), // 44: gitpod.v1.UpdateWorkspaceResponse - (*StopWorkspaceRequest)(nil), // 45: gitpod.v1.StopWorkspaceRequest - (*StopWorkspaceResponse)(nil), // 46: gitpod.v1.StopWorkspaceResponse - (*DeleteWorkspaceRequest)(nil), // 47: gitpod.v1.DeleteWorkspaceRequest - (*DeleteWorkspaceResponse)(nil), // 48: gitpod.v1.DeleteWorkspaceResponse - (*ListWorkspaceClassesRequest)(nil), // 49: gitpod.v1.ListWorkspaceClassesRequest - (*ListWorkspaceClassesResponse)(nil), // 50: gitpod.v1.ListWorkspaceClassesResponse - (*ParseContextURLRequest)(nil), // 51: gitpod.v1.ParseContextURLRequest - (*ParseContextURLResponse)(nil), // 52: gitpod.v1.ParseContextURLResponse - (*WorkspaceClass)(nil), // 53: gitpod.v1.WorkspaceClass - (*CreateWorkspaceSnapshotRequest)(nil), // 54: gitpod.v1.CreateWorkspaceSnapshotRequest - (*CreateWorkspaceSnapshotResponse)(nil), // 55: gitpod.v1.CreateWorkspaceSnapshotResponse - (*WaitForWorkspaceSnapshotRequest)(nil), // 56: gitpod.v1.WaitForWorkspaceSnapshotRequest - (*WaitForWorkspaceSnapshotResponse)(nil), // 57: gitpod.v1.WaitForWorkspaceSnapshotResponse - (*WorkspaceSnapshot)(nil), // 58: gitpod.v1.WorkspaceSnapshot - (*WorkspaceSession)(nil), // 59: gitpod.v1.WorkspaceSession - (*CreateAndStartWorkspaceRequest_ContextURL)(nil), // 60: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL - nil, // 61: gitpod.v1.WorkspaceMetadata.AnnotationsEntry - (*WorkspaceSpec_Timeout)(nil), // 62: gitpod.v1.WorkspaceSpec.Timeout - (*WorkspaceSpec_GitSpec)(nil), // 63: gitpod.v1.WorkspaceSpec.GitSpec - (*WorkspaceStatus_WorkspaceConditions)(nil), // 64: gitpod.v1.WorkspaceStatus.WorkspaceConditions - (*WorkspaceStatus_PrebuildResult)(nil), // 65: gitpod.v1.WorkspaceStatus.PrebuildResult - (*WorkspaceInitializer_Spec)(nil), // 66: gitpod.v1.WorkspaceInitializer.Spec - (*GitInitializer_GitConfig)(nil), // 67: gitpod.v1.GitInitializer.GitConfig - nil, // 68: gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry - (*FileDownloadInitializer_FileInfo)(nil), // 69: gitpod.v1.FileDownloadInitializer.FileInfo - (*UpdateWorkspaceRequest_UpdateWorkspaceMetadata)(nil), // 70: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata - (*UpdateWorkspaceRequest_UpdateTimeout)(nil), // 71: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout - (*UpdateWorkspaceRequest_UpdateWorkspaceSpec)(nil), // 72: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec - (*WorkspaceSession_Metrics)(nil), // 73: gitpod.v1.WorkspaceSession.Metrics - (*PaginationRequest)(nil), // 74: gitpod.v1.PaginationRequest - (*PaginationResponse)(nil), // 75: gitpod.v1.PaginationResponse - (*timestamppb.Timestamp)(nil), // 76: google.protobuf.Timestamp - (*EnvironmentVariable)(nil), // 77: gitpod.v1.EnvironmentVariable - (*EditorReference)(nil), // 78: gitpod.v1.EditorReference - (*durationpb.Duration)(nil), // 79: google.protobuf.Duration + (WorkspaceSession_WorkspaceContext_RefType)(0), // 8: gitpod.v1.WorkspaceSession.WorkspaceContext.RefType + (*UpdateWorkspacePortRequest)(nil), // 9: gitpod.v1.UpdateWorkspacePortRequest + (*UpdateWorkspacePortResponse)(nil), // 10: gitpod.v1.UpdateWorkspacePortResponse + (*GetWorkspaceRequest)(nil), // 11: gitpod.v1.GetWorkspaceRequest + (*GetWorkspaceResponse)(nil), // 12: gitpod.v1.GetWorkspaceResponse + (*WatchWorkspaceStatusRequest)(nil), // 13: gitpod.v1.WatchWorkspaceStatusRequest + (*WatchWorkspaceStatusResponse)(nil), // 14: gitpod.v1.WatchWorkspaceStatusResponse + (*ListWorkspacesRequest)(nil), // 15: gitpod.v1.ListWorkspacesRequest + (*ListWorkspacesResponse)(nil), // 16: gitpod.v1.ListWorkspacesResponse + (*ListWorkspaceSessionsRequest)(nil), // 17: gitpod.v1.ListWorkspaceSessionsRequest + (*ListWorkspaceSessionsResponse)(nil), // 18: gitpod.v1.ListWorkspaceSessionsResponse + (*CreateAndStartWorkspaceRequest)(nil), // 19: gitpod.v1.CreateAndStartWorkspaceRequest + (*CreateAndStartWorkspaceResponse)(nil), // 20: gitpod.v1.CreateAndStartWorkspaceResponse + (*StartWorkspaceRequest)(nil), // 21: gitpod.v1.StartWorkspaceRequest + (*StartWorkspaceResponse)(nil), // 22: gitpod.v1.StartWorkspaceResponse + (*GetWorkspaceDefaultImageRequest)(nil), // 23: gitpod.v1.GetWorkspaceDefaultImageRequest + (*GetWorkspaceDefaultImageResponse)(nil), // 24: gitpod.v1.GetWorkspaceDefaultImageResponse + (*SendHeartBeatRequest)(nil), // 25: gitpod.v1.SendHeartBeatRequest + (*SendHeartBeatResponse)(nil), // 26: gitpod.v1.SendHeartBeatResponse + (*GetWorkspaceOwnerTokenRequest)(nil), // 27: gitpod.v1.GetWorkspaceOwnerTokenRequest + (*GetWorkspaceOwnerTokenResponse)(nil), // 28: gitpod.v1.GetWorkspaceOwnerTokenResponse + (*GetWorkspaceEditorCredentialsRequest)(nil), // 29: gitpod.v1.GetWorkspaceEditorCredentialsRequest + (*GetWorkspaceEditorCredentialsResponse)(nil), // 30: gitpod.v1.GetWorkspaceEditorCredentialsResponse + (*Workspace)(nil), // 31: gitpod.v1.Workspace + (*WorkspaceMetadata)(nil), // 32: gitpod.v1.WorkspaceMetadata + (*WorkspaceSpec)(nil), // 33: gitpod.v1.WorkspaceSpec + (*WorkspaceStatus)(nil), // 34: gitpod.v1.WorkspaceStatus + (*WorkspacePort)(nil), // 35: gitpod.v1.WorkspacePort + (*WorkspaceGitStatus)(nil), // 36: gitpod.v1.WorkspaceGitStatus + (*WorkspacePhase)(nil), // 37: gitpod.v1.WorkspacePhase + (*WorkspaceInitializer)(nil), // 38: gitpod.v1.WorkspaceInitializer + (*GitInitializer)(nil), // 39: gitpod.v1.GitInitializer + (*SnapshotInitializer)(nil), // 40: gitpod.v1.SnapshotInitializer + (*PrebuildInitializer)(nil), // 41: gitpod.v1.PrebuildInitializer + (*FileDownloadInitializer)(nil), // 42: gitpod.v1.FileDownloadInitializer + (*GitStatus)(nil), // 43: gitpod.v1.GitStatus + (*UpdateWorkspaceRequest)(nil), // 44: gitpod.v1.UpdateWorkspaceRequest + (*UpdateWorkspaceResponse)(nil), // 45: gitpod.v1.UpdateWorkspaceResponse + (*StopWorkspaceRequest)(nil), // 46: gitpod.v1.StopWorkspaceRequest + (*StopWorkspaceResponse)(nil), // 47: gitpod.v1.StopWorkspaceResponse + (*DeleteWorkspaceRequest)(nil), // 48: gitpod.v1.DeleteWorkspaceRequest + (*DeleteWorkspaceResponse)(nil), // 49: gitpod.v1.DeleteWorkspaceResponse + (*ListWorkspaceClassesRequest)(nil), // 50: gitpod.v1.ListWorkspaceClassesRequest + (*ListWorkspaceClassesResponse)(nil), // 51: gitpod.v1.ListWorkspaceClassesResponse + (*ParseContextURLRequest)(nil), // 52: gitpod.v1.ParseContextURLRequest + (*ParseContextURLResponse)(nil), // 53: gitpod.v1.ParseContextURLResponse + (*WorkspaceClass)(nil), // 54: gitpod.v1.WorkspaceClass + (*CreateWorkspaceSnapshotRequest)(nil), // 55: gitpod.v1.CreateWorkspaceSnapshotRequest + (*CreateWorkspaceSnapshotResponse)(nil), // 56: gitpod.v1.CreateWorkspaceSnapshotResponse + (*WaitForWorkspaceSnapshotRequest)(nil), // 57: gitpod.v1.WaitForWorkspaceSnapshotRequest + (*WaitForWorkspaceSnapshotResponse)(nil), // 58: gitpod.v1.WaitForWorkspaceSnapshotResponse + (*WorkspaceSnapshot)(nil), // 59: gitpod.v1.WorkspaceSnapshot + (*WorkspaceSession)(nil), // 60: gitpod.v1.WorkspaceSession + (*CreateAndStartWorkspaceRequest_ContextURL)(nil), // 61: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL + nil, // 62: gitpod.v1.WorkspaceMetadata.AnnotationsEntry + (*WorkspaceSpec_Timeout)(nil), // 63: gitpod.v1.WorkspaceSpec.Timeout + (*WorkspaceSpec_GitSpec)(nil), // 64: gitpod.v1.WorkspaceSpec.GitSpec + (*WorkspaceStatus_WorkspaceConditions)(nil), // 65: gitpod.v1.WorkspaceStatus.WorkspaceConditions + (*WorkspaceStatus_PrebuildResult)(nil), // 66: gitpod.v1.WorkspaceStatus.PrebuildResult + (*WorkspaceInitializer_Spec)(nil), // 67: gitpod.v1.WorkspaceInitializer.Spec + (*GitInitializer_GitConfig)(nil), // 68: gitpod.v1.GitInitializer.GitConfig + nil, // 69: gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry + (*FileDownloadInitializer_FileInfo)(nil), // 70: gitpod.v1.FileDownloadInitializer.FileInfo + (*UpdateWorkspaceRequest_UpdateWorkspaceMetadata)(nil), // 71: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata + (*UpdateWorkspaceRequest_UpdateTimeout)(nil), // 72: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout + (*UpdateWorkspaceRequest_UpdateWorkspaceSpec)(nil), // 73: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec + (*WorkspaceSession_Owner)(nil), // 74: gitpod.v1.WorkspaceSession.Owner + (*WorkspaceSession_WorkspaceContext)(nil), // 75: gitpod.v1.WorkspaceSession.WorkspaceContext + (*WorkspaceSession_Metrics)(nil), // 76: gitpod.v1.WorkspaceSession.Metrics + (*WorkspaceSession_WorkspaceContext_Repository)(nil), // 77: gitpod.v1.WorkspaceSession.WorkspaceContext.Repository + (*PaginationRequest)(nil), // 78: gitpod.v1.PaginationRequest + (*PaginationResponse)(nil), // 79: gitpod.v1.PaginationResponse + (*timestamppb.Timestamp)(nil), // 80: google.protobuf.Timestamp + (*EnvironmentVariable)(nil), // 81: gitpod.v1.EnvironmentVariable + (*EditorReference)(nil), // 82: gitpod.v1.EditorReference + (*durationpb.Duration)(nil), // 83: google.protobuf.Duration } var file_gitpod_v1_workspace_proto_depIdxs = []int32{ 0, // 0: gitpod.v1.UpdateWorkspacePortRequest.admission:type_name -> gitpod.v1.AdmissionLevel 4, // 1: gitpod.v1.UpdateWorkspacePortRequest.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol - 30, // 2: gitpod.v1.GetWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 33, // 3: gitpod.v1.WatchWorkspaceStatusResponse.status:type_name -> gitpod.v1.WorkspaceStatus - 74, // 4: gitpod.v1.ListWorkspacesRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 75, // 5: gitpod.v1.ListWorkspacesResponse.pagination:type_name -> gitpod.v1.PaginationResponse - 30, // 6: gitpod.v1.ListWorkspacesResponse.workspaces:type_name -> gitpod.v1.Workspace - 74, // 7: gitpod.v1.ListWorkspaceSessionsRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 76, // 8: gitpod.v1.ListWorkspaceSessionsRequest.from:type_name -> google.protobuf.Timestamp - 76, // 9: gitpod.v1.ListWorkspaceSessionsRequest.to:type_name -> google.protobuf.Timestamp - 75, // 10: gitpod.v1.ListWorkspaceSessionsResponse.pagination:type_name -> gitpod.v1.PaginationResponse - 59, // 11: gitpod.v1.ListWorkspaceSessionsResponse.workspace_sessions:type_name -> gitpod.v1.WorkspaceSession - 31, // 12: gitpod.v1.CreateAndStartWorkspaceRequest.metadata:type_name -> gitpod.v1.WorkspaceMetadata - 60, // 13: gitpod.v1.CreateAndStartWorkspaceRequest.context_url:type_name -> gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL - 32, // 14: gitpod.v1.CreateAndStartWorkspaceRequest.spec:type_name -> gitpod.v1.WorkspaceSpec - 30, // 15: gitpod.v1.CreateAndStartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 30, // 16: gitpod.v1.StartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 31, // 2: gitpod.v1.GetWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 34, // 3: gitpod.v1.WatchWorkspaceStatusResponse.status:type_name -> gitpod.v1.WorkspaceStatus + 78, // 4: gitpod.v1.ListWorkspacesRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 79, // 5: gitpod.v1.ListWorkspacesResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 31, // 6: gitpod.v1.ListWorkspacesResponse.workspaces:type_name -> gitpod.v1.Workspace + 78, // 7: gitpod.v1.ListWorkspaceSessionsRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 80, // 8: gitpod.v1.ListWorkspaceSessionsRequest.from:type_name -> google.protobuf.Timestamp + 80, // 9: gitpod.v1.ListWorkspaceSessionsRequest.to:type_name -> google.protobuf.Timestamp + 79, // 10: gitpod.v1.ListWorkspaceSessionsResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 60, // 11: gitpod.v1.ListWorkspaceSessionsResponse.workspace_sessions:type_name -> gitpod.v1.WorkspaceSession + 32, // 12: gitpod.v1.CreateAndStartWorkspaceRequest.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 61, // 13: gitpod.v1.CreateAndStartWorkspaceRequest.context_url:type_name -> gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL + 33, // 14: gitpod.v1.CreateAndStartWorkspaceRequest.spec:type_name -> gitpod.v1.WorkspaceSpec + 31, // 15: gitpod.v1.CreateAndStartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 31, // 16: gitpod.v1.StartWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace 1, // 17: gitpod.v1.GetWorkspaceDefaultImageResponse.source:type_name -> gitpod.v1.GetWorkspaceDefaultImageResponse.Source - 31, // 18: gitpod.v1.Workspace.metadata:type_name -> gitpod.v1.WorkspaceMetadata - 32, // 19: gitpod.v1.Workspace.spec:type_name -> gitpod.v1.WorkspaceSpec - 33, // 20: gitpod.v1.Workspace.status:type_name -> gitpod.v1.WorkspaceStatus - 61, // 21: gitpod.v1.WorkspaceMetadata.annotations:type_name -> gitpod.v1.WorkspaceMetadata.AnnotationsEntry - 37, // 22: gitpod.v1.WorkspaceSpec.initializer:type_name -> gitpod.v1.WorkspaceInitializer + 32, // 18: gitpod.v1.Workspace.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 33, // 19: gitpod.v1.Workspace.spec:type_name -> gitpod.v1.WorkspaceSpec + 34, // 20: gitpod.v1.Workspace.status:type_name -> gitpod.v1.WorkspaceStatus + 62, // 21: gitpod.v1.WorkspaceMetadata.annotations:type_name -> gitpod.v1.WorkspaceMetadata.AnnotationsEntry + 38, // 22: gitpod.v1.WorkspaceSpec.initializer:type_name -> gitpod.v1.WorkspaceInitializer 2, // 23: gitpod.v1.WorkspaceSpec.type:type_name -> gitpod.v1.WorkspaceSpec.WorkspaceType - 34, // 24: gitpod.v1.WorkspaceSpec.ports:type_name -> gitpod.v1.WorkspacePort - 77, // 25: gitpod.v1.WorkspaceSpec.environment_variables:type_name -> gitpod.v1.EnvironmentVariable - 63, // 26: gitpod.v1.WorkspaceSpec.git:type_name -> gitpod.v1.WorkspaceSpec.GitSpec - 62, // 27: gitpod.v1.WorkspaceSpec.timeout:type_name -> gitpod.v1.WorkspaceSpec.Timeout + 35, // 24: gitpod.v1.WorkspaceSpec.ports:type_name -> gitpod.v1.WorkspacePort + 81, // 25: gitpod.v1.WorkspaceSpec.environment_variables:type_name -> gitpod.v1.EnvironmentVariable + 64, // 26: gitpod.v1.WorkspaceSpec.git:type_name -> gitpod.v1.WorkspaceSpec.GitSpec + 63, // 27: gitpod.v1.WorkspaceSpec.timeout:type_name -> gitpod.v1.WorkspaceSpec.Timeout 0, // 28: gitpod.v1.WorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel - 76, // 29: gitpod.v1.WorkspaceSpec.last_user_activity:type_name -> google.protobuf.Timestamp - 78, // 30: gitpod.v1.WorkspaceSpec.editor:type_name -> gitpod.v1.EditorReference - 36, // 31: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase - 64, // 32: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions - 65, // 33: gitpod.v1.WorkspaceStatus.prebuild_result:type_name -> gitpod.v1.WorkspaceStatus.PrebuildResult - 35, // 34: gitpod.v1.WorkspaceStatus.git_status:type_name -> gitpod.v1.WorkspaceGitStatus + 80, // 29: gitpod.v1.WorkspaceSpec.last_user_activity:type_name -> google.protobuf.Timestamp + 82, // 30: gitpod.v1.WorkspaceSpec.editor:type_name -> gitpod.v1.EditorReference + 37, // 31: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase + 65, // 32: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions + 66, // 33: gitpod.v1.WorkspaceStatus.prebuild_result:type_name -> gitpod.v1.WorkspaceStatus.PrebuildResult + 36, // 34: gitpod.v1.WorkspaceStatus.git_status:type_name -> gitpod.v1.WorkspaceGitStatus 0, // 35: gitpod.v1.WorkspacePort.admission:type_name -> gitpod.v1.AdmissionLevel 4, // 36: gitpod.v1.WorkspacePort.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol 5, // 37: gitpod.v1.WorkspacePhase.name:type_name -> gitpod.v1.WorkspacePhase.Phase - 76, // 38: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp - 66, // 39: gitpod.v1.WorkspaceInitializer.specs:type_name -> gitpod.v1.WorkspaceInitializer.Spec + 80, // 38: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp + 67, // 39: gitpod.v1.WorkspaceInitializer.specs:type_name -> gitpod.v1.WorkspaceInitializer.Spec 6, // 40: gitpod.v1.GitInitializer.target_mode:type_name -> gitpod.v1.GitInitializer.CloneTargetMode - 67, // 41: gitpod.v1.GitInitializer.config:type_name -> gitpod.v1.GitInitializer.GitConfig - 69, // 42: gitpod.v1.FileDownloadInitializer.files:type_name -> gitpod.v1.FileDownloadInitializer.FileInfo - 70, // 43: gitpod.v1.UpdateWorkspaceRequest.metadata:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata - 72, // 44: gitpod.v1.UpdateWorkspaceRequest.spec:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec - 35, // 45: gitpod.v1.UpdateWorkspaceRequest.git_status:type_name -> gitpod.v1.WorkspaceGitStatus - 30, // 46: gitpod.v1.UpdateWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 74, // 47: gitpod.v1.ListWorkspaceClassesRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 75, // 48: gitpod.v1.ListWorkspaceClassesResponse.pagination:type_name -> gitpod.v1.PaginationResponse - 53, // 49: gitpod.v1.ListWorkspaceClassesResponse.workspace_classes:type_name -> gitpod.v1.WorkspaceClass - 31, // 50: gitpod.v1.ParseContextURLResponse.metadata:type_name -> gitpod.v1.WorkspaceMetadata - 32, // 51: gitpod.v1.ParseContextURLResponse.spec:type_name -> gitpod.v1.WorkspaceSpec - 58, // 52: gitpod.v1.CreateWorkspaceSnapshotResponse.snapshot:type_name -> gitpod.v1.WorkspaceSnapshot - 76, // 53: gitpod.v1.WorkspaceSnapshot.creation_time:type_name -> google.protobuf.Timestamp - 30, // 54: gitpod.v1.WorkspaceSession.workspace:type_name -> gitpod.v1.Workspace - 76, // 55: gitpod.v1.WorkspaceSession.creation_time:type_name -> google.protobuf.Timestamp - 76, // 56: gitpod.v1.WorkspaceSession.deployed_time:type_name -> google.protobuf.Timestamp - 76, // 57: gitpod.v1.WorkspaceSession.started_time:type_name -> google.protobuf.Timestamp - 76, // 58: gitpod.v1.WorkspaceSession.stopping_time:type_name -> google.protobuf.Timestamp - 76, // 59: gitpod.v1.WorkspaceSession.stopped_time:type_name -> google.protobuf.Timestamp - 73, // 60: gitpod.v1.WorkspaceSession.metrics:type_name -> gitpod.v1.WorkspaceSession.Metrics - 78, // 61: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL.editor:type_name -> gitpod.v1.EditorReference - 79, // 62: gitpod.v1.WorkspaceSpec.Timeout.inactivity:type_name -> google.protobuf.Duration - 79, // 63: gitpod.v1.WorkspaceSpec.Timeout.disconnected:type_name -> google.protobuf.Duration - 79, // 64: gitpod.v1.WorkspaceSpec.Timeout.maximum_lifetime:type_name -> google.protobuf.Duration - 3, // 65: gitpod.v1.WorkspaceStatus.WorkspaceConditions.failed_reason:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason - 38, // 66: gitpod.v1.WorkspaceInitializer.Spec.git:type_name -> gitpod.v1.GitInitializer - 39, // 67: gitpod.v1.WorkspaceInitializer.Spec.snapshot:type_name -> gitpod.v1.SnapshotInitializer - 40, // 68: gitpod.v1.WorkspaceInitializer.Spec.prebuild:type_name -> gitpod.v1.PrebuildInitializer - 41, // 69: gitpod.v1.WorkspaceInitializer.Spec.download:type_name -> gitpod.v1.FileDownloadInitializer - 68, // 70: gitpod.v1.GitInitializer.GitConfig.custom_config:type_name -> gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry - 7, // 71: gitpod.v1.GitInitializer.GitConfig.authentication:type_name -> gitpod.v1.GitInitializer.AuthMethod - 79, // 72: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.inactivity:type_name -> google.protobuf.Duration - 79, // 73: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.disconnected:type_name -> google.protobuf.Duration - 71, // 74: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.timeout:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout - 0, // 75: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel - 10, // 76: gitpod.v1.WorkspaceService.GetWorkspace:input_type -> gitpod.v1.GetWorkspaceRequest - 12, // 77: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:input_type -> gitpod.v1.WatchWorkspaceStatusRequest - 14, // 78: gitpod.v1.WorkspaceService.ListWorkspaces:input_type -> gitpod.v1.ListWorkspacesRequest - 16, // 79: gitpod.v1.WorkspaceService.ListWorkspaceSessions:input_type -> gitpod.v1.ListWorkspaceSessionsRequest - 18, // 80: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:input_type -> gitpod.v1.CreateAndStartWorkspaceRequest - 20, // 81: gitpod.v1.WorkspaceService.StartWorkspace:input_type -> gitpod.v1.StartWorkspaceRequest - 43, // 82: gitpod.v1.WorkspaceService.UpdateWorkspace:input_type -> gitpod.v1.UpdateWorkspaceRequest - 45, // 83: gitpod.v1.WorkspaceService.StopWorkspace:input_type -> gitpod.v1.StopWorkspaceRequest - 47, // 84: gitpod.v1.WorkspaceService.DeleteWorkspace:input_type -> gitpod.v1.DeleteWorkspaceRequest - 49, // 85: gitpod.v1.WorkspaceService.ListWorkspaceClasses:input_type -> gitpod.v1.ListWorkspaceClassesRequest - 51, // 86: gitpod.v1.WorkspaceService.ParseContextURL:input_type -> gitpod.v1.ParseContextURLRequest - 22, // 87: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:input_type -> gitpod.v1.GetWorkspaceDefaultImageRequest - 24, // 88: gitpod.v1.WorkspaceService.SendHeartBeat:input_type -> gitpod.v1.SendHeartBeatRequest - 26, // 89: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:input_type -> gitpod.v1.GetWorkspaceOwnerTokenRequest - 28, // 90: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:input_type -> gitpod.v1.GetWorkspaceEditorCredentialsRequest - 54, // 91: gitpod.v1.WorkspaceService.CreateWorkspaceSnapshot:input_type -> gitpod.v1.CreateWorkspaceSnapshotRequest - 56, // 92: gitpod.v1.WorkspaceService.WaitForWorkspaceSnapshot:input_type -> gitpod.v1.WaitForWorkspaceSnapshotRequest - 8, // 93: gitpod.v1.WorkspaceService.UpdateWorkspacePort:input_type -> gitpod.v1.UpdateWorkspacePortRequest - 11, // 94: gitpod.v1.WorkspaceService.GetWorkspace:output_type -> gitpod.v1.GetWorkspaceResponse - 13, // 95: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:output_type -> gitpod.v1.WatchWorkspaceStatusResponse - 15, // 96: gitpod.v1.WorkspaceService.ListWorkspaces:output_type -> gitpod.v1.ListWorkspacesResponse - 17, // 97: gitpod.v1.WorkspaceService.ListWorkspaceSessions:output_type -> gitpod.v1.ListWorkspaceSessionsResponse - 19, // 98: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:output_type -> gitpod.v1.CreateAndStartWorkspaceResponse - 21, // 99: gitpod.v1.WorkspaceService.StartWorkspace:output_type -> gitpod.v1.StartWorkspaceResponse - 44, // 100: gitpod.v1.WorkspaceService.UpdateWorkspace:output_type -> gitpod.v1.UpdateWorkspaceResponse - 46, // 101: gitpod.v1.WorkspaceService.StopWorkspace:output_type -> gitpod.v1.StopWorkspaceResponse - 48, // 102: gitpod.v1.WorkspaceService.DeleteWorkspace:output_type -> gitpod.v1.DeleteWorkspaceResponse - 50, // 103: gitpod.v1.WorkspaceService.ListWorkspaceClasses:output_type -> gitpod.v1.ListWorkspaceClassesResponse - 52, // 104: gitpod.v1.WorkspaceService.ParseContextURL:output_type -> gitpod.v1.ParseContextURLResponse - 23, // 105: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:output_type -> gitpod.v1.GetWorkspaceDefaultImageResponse - 25, // 106: gitpod.v1.WorkspaceService.SendHeartBeat:output_type -> gitpod.v1.SendHeartBeatResponse - 27, // 107: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:output_type -> gitpod.v1.GetWorkspaceOwnerTokenResponse - 29, // 108: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:output_type -> gitpod.v1.GetWorkspaceEditorCredentialsResponse - 55, // 109: gitpod.v1.WorkspaceService.CreateWorkspaceSnapshot:output_type -> gitpod.v1.CreateWorkspaceSnapshotResponse - 57, // 110: gitpod.v1.WorkspaceService.WaitForWorkspaceSnapshot:output_type -> gitpod.v1.WaitForWorkspaceSnapshotResponse - 9, // 111: gitpod.v1.WorkspaceService.UpdateWorkspacePort:output_type -> gitpod.v1.UpdateWorkspacePortResponse - 94, // [94:112] is the sub-list for method output_type - 76, // [76:94] is the sub-list for method input_type - 76, // [76:76] is the sub-list for extension type_name - 76, // [76:76] is the sub-list for extension extendee - 0, // [0:76] is the sub-list for field type_name + 68, // 41: gitpod.v1.GitInitializer.config:type_name -> gitpod.v1.GitInitializer.GitConfig + 70, // 42: gitpod.v1.FileDownloadInitializer.files:type_name -> gitpod.v1.FileDownloadInitializer.FileInfo + 71, // 43: gitpod.v1.UpdateWorkspaceRequest.metadata:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata + 73, // 44: gitpod.v1.UpdateWorkspaceRequest.spec:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec + 36, // 45: gitpod.v1.UpdateWorkspaceRequest.git_status:type_name -> gitpod.v1.WorkspaceGitStatus + 31, // 46: gitpod.v1.UpdateWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace + 78, // 47: gitpod.v1.ListWorkspaceClassesRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 79, // 48: gitpod.v1.ListWorkspaceClassesResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 54, // 49: gitpod.v1.ListWorkspaceClassesResponse.workspace_classes:type_name -> gitpod.v1.WorkspaceClass + 32, // 50: gitpod.v1.ParseContextURLResponse.metadata:type_name -> gitpod.v1.WorkspaceMetadata + 33, // 51: gitpod.v1.ParseContextURLResponse.spec:type_name -> gitpod.v1.WorkspaceSpec + 59, // 52: gitpod.v1.CreateWorkspaceSnapshotResponse.snapshot:type_name -> gitpod.v1.WorkspaceSnapshot + 80, // 53: gitpod.v1.WorkspaceSnapshot.creation_time:type_name -> google.protobuf.Timestamp + 31, // 54: gitpod.v1.WorkspaceSession.workspace:type_name -> gitpod.v1.Workspace + 80, // 55: gitpod.v1.WorkspaceSession.creation_time:type_name -> google.protobuf.Timestamp + 80, // 56: gitpod.v1.WorkspaceSession.deployed_time:type_name -> google.protobuf.Timestamp + 80, // 57: gitpod.v1.WorkspaceSession.started_time:type_name -> google.protobuf.Timestamp + 80, // 58: gitpod.v1.WorkspaceSession.stopping_time:type_name -> google.protobuf.Timestamp + 80, // 59: gitpod.v1.WorkspaceSession.stopped_time:type_name -> google.protobuf.Timestamp + 76, // 60: gitpod.v1.WorkspaceSession.metrics:type_name -> gitpod.v1.WorkspaceSession.Metrics + 74, // 61: gitpod.v1.WorkspaceSession.owner:type_name -> gitpod.v1.WorkspaceSession.Owner + 75, // 62: gitpod.v1.WorkspaceSession.context:type_name -> gitpod.v1.WorkspaceSession.WorkspaceContext + 82, // 63: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL.editor:type_name -> gitpod.v1.EditorReference + 83, // 64: gitpod.v1.WorkspaceSpec.Timeout.inactivity:type_name -> google.protobuf.Duration + 83, // 65: gitpod.v1.WorkspaceSpec.Timeout.disconnected:type_name -> google.protobuf.Duration + 83, // 66: gitpod.v1.WorkspaceSpec.Timeout.maximum_lifetime:type_name -> google.protobuf.Duration + 3, // 67: gitpod.v1.WorkspaceStatus.WorkspaceConditions.failed_reason:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason + 39, // 68: gitpod.v1.WorkspaceInitializer.Spec.git:type_name -> gitpod.v1.GitInitializer + 40, // 69: gitpod.v1.WorkspaceInitializer.Spec.snapshot:type_name -> gitpod.v1.SnapshotInitializer + 41, // 70: gitpod.v1.WorkspaceInitializer.Spec.prebuild:type_name -> gitpod.v1.PrebuildInitializer + 42, // 71: gitpod.v1.WorkspaceInitializer.Spec.download:type_name -> gitpod.v1.FileDownloadInitializer + 69, // 72: gitpod.v1.GitInitializer.GitConfig.custom_config:type_name -> gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry + 7, // 73: gitpod.v1.GitInitializer.GitConfig.authentication:type_name -> gitpod.v1.GitInitializer.AuthMethod + 83, // 74: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.inactivity:type_name -> google.protobuf.Duration + 83, // 75: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.disconnected:type_name -> google.protobuf.Duration + 72, // 76: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.timeout:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout + 0, // 77: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel + 8, // 78: gitpod.v1.WorkspaceSession.WorkspaceContext.ref_type:type_name -> gitpod.v1.WorkspaceSession.WorkspaceContext.RefType + 77, // 79: gitpod.v1.WorkspaceSession.WorkspaceContext.repository:type_name -> gitpod.v1.WorkspaceSession.WorkspaceContext.Repository + 11, // 80: gitpod.v1.WorkspaceService.GetWorkspace:input_type -> gitpod.v1.GetWorkspaceRequest + 13, // 81: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:input_type -> gitpod.v1.WatchWorkspaceStatusRequest + 15, // 82: gitpod.v1.WorkspaceService.ListWorkspaces:input_type -> gitpod.v1.ListWorkspacesRequest + 17, // 83: gitpod.v1.WorkspaceService.ListWorkspaceSessions:input_type -> gitpod.v1.ListWorkspaceSessionsRequest + 19, // 84: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:input_type -> gitpod.v1.CreateAndStartWorkspaceRequest + 21, // 85: gitpod.v1.WorkspaceService.StartWorkspace:input_type -> gitpod.v1.StartWorkspaceRequest + 44, // 86: gitpod.v1.WorkspaceService.UpdateWorkspace:input_type -> gitpod.v1.UpdateWorkspaceRequest + 46, // 87: gitpod.v1.WorkspaceService.StopWorkspace:input_type -> gitpod.v1.StopWorkspaceRequest + 48, // 88: gitpod.v1.WorkspaceService.DeleteWorkspace:input_type -> gitpod.v1.DeleteWorkspaceRequest + 50, // 89: gitpod.v1.WorkspaceService.ListWorkspaceClasses:input_type -> gitpod.v1.ListWorkspaceClassesRequest + 52, // 90: gitpod.v1.WorkspaceService.ParseContextURL:input_type -> gitpod.v1.ParseContextURLRequest + 23, // 91: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:input_type -> gitpod.v1.GetWorkspaceDefaultImageRequest + 25, // 92: gitpod.v1.WorkspaceService.SendHeartBeat:input_type -> gitpod.v1.SendHeartBeatRequest + 27, // 93: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:input_type -> gitpod.v1.GetWorkspaceOwnerTokenRequest + 29, // 94: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:input_type -> gitpod.v1.GetWorkspaceEditorCredentialsRequest + 55, // 95: gitpod.v1.WorkspaceService.CreateWorkspaceSnapshot:input_type -> gitpod.v1.CreateWorkspaceSnapshotRequest + 57, // 96: gitpod.v1.WorkspaceService.WaitForWorkspaceSnapshot:input_type -> gitpod.v1.WaitForWorkspaceSnapshotRequest + 9, // 97: gitpod.v1.WorkspaceService.UpdateWorkspacePort:input_type -> gitpod.v1.UpdateWorkspacePortRequest + 12, // 98: gitpod.v1.WorkspaceService.GetWorkspace:output_type -> gitpod.v1.GetWorkspaceResponse + 14, // 99: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:output_type -> gitpod.v1.WatchWorkspaceStatusResponse + 16, // 100: gitpod.v1.WorkspaceService.ListWorkspaces:output_type -> gitpod.v1.ListWorkspacesResponse + 18, // 101: gitpod.v1.WorkspaceService.ListWorkspaceSessions:output_type -> gitpod.v1.ListWorkspaceSessionsResponse + 20, // 102: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:output_type -> gitpod.v1.CreateAndStartWorkspaceResponse + 22, // 103: gitpod.v1.WorkspaceService.StartWorkspace:output_type -> gitpod.v1.StartWorkspaceResponse + 45, // 104: gitpod.v1.WorkspaceService.UpdateWorkspace:output_type -> gitpod.v1.UpdateWorkspaceResponse + 47, // 105: gitpod.v1.WorkspaceService.StopWorkspace:output_type -> gitpod.v1.StopWorkspaceResponse + 49, // 106: gitpod.v1.WorkspaceService.DeleteWorkspace:output_type -> gitpod.v1.DeleteWorkspaceResponse + 51, // 107: gitpod.v1.WorkspaceService.ListWorkspaceClasses:output_type -> gitpod.v1.ListWorkspaceClassesResponse + 53, // 108: gitpod.v1.WorkspaceService.ParseContextURL:output_type -> gitpod.v1.ParseContextURLResponse + 24, // 109: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:output_type -> gitpod.v1.GetWorkspaceDefaultImageResponse + 26, // 110: gitpod.v1.WorkspaceService.SendHeartBeat:output_type -> gitpod.v1.SendHeartBeatResponse + 28, // 111: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:output_type -> gitpod.v1.GetWorkspaceOwnerTokenResponse + 30, // 112: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:output_type -> gitpod.v1.GetWorkspaceEditorCredentialsResponse + 56, // 113: gitpod.v1.WorkspaceService.CreateWorkspaceSnapshot:output_type -> gitpod.v1.CreateWorkspaceSnapshotResponse + 58, // 114: gitpod.v1.WorkspaceService.WaitForWorkspaceSnapshot:output_type -> gitpod.v1.WaitForWorkspaceSnapshotResponse + 10, // 115: gitpod.v1.WorkspaceService.UpdateWorkspacePort:output_type -> gitpod.v1.UpdateWorkspacePortResponse + 98, // [98:116] is the sub-list for method output_type + 80, // [80:98] is the sub-list for method input_type + 80, // [80:80] is the sub-list for extension type_name + 80, // [80:80] is the sub-list for extension extendee + 0, // [0:80] is the sub-list for field type_name } func init() { file_gitpod_v1_workspace_proto_init() } @@ -6489,6 +6833,30 @@ func file_gitpod_v1_workspace_proto_init() { } } file_gitpod_v1_workspace_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceSession_Owner); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceSession_WorkspaceContext); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_workspace_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceSession_Metrics); i { case 0: return &v.state @@ -6500,6 +6868,18 @@ func file_gitpod_v1_workspace_proto_init() { return nil } } + file_gitpod_v1_workspace_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceSession_WorkspaceContext_Repository); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_gitpod_v1_workspace_proto_msgTypes[0].OneofWrappers = []interface{}{} file_gitpod_v1_workspace_proto_msgTypes[10].OneofWrappers = []interface{}{ @@ -6521,8 +6901,8 @@ func file_gitpod_v1_workspace_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gitpod_v1_workspace_proto_rawDesc, - NumEnums: 8, - NumMessages: 66, + NumEnums: 9, + NumMessages: 69, NumExtensions: 0, NumServices: 1, }, diff --git a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/WorkspaceOuterClass.java b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/WorkspaceOuterClass.java index 23ffaeabebd481..8fab69250cca87 100644 --- a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/WorkspaceOuterClass.java +++ b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/WorkspaceOuterClass.java @@ -20854,7 +20854,7 @@ public interface WorkspaceSpecOrBuilder extends /** *
    -     * Type denots the kind of workspace we ought to start
    +     * Type denotes the kind of workspace we ought to start
          * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -20863,7 +20863,7 @@ public interface WorkspaceSpecOrBuilder extends int getTypeValue(); /** *
    -     * Type denots the kind of workspace we ought to start
    +     * Type denotes the kind of workspace we ought to start
          * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -21020,7 +21020,7 @@ io.gitpod.publicapi.v1.Envvar.EnvironmentVariableOrBuilder getEnvironmentVariabl /** *
    -     * admission controlls who can access the workspace and its ports.
    +     * admission controls who can access the workspace and its ports.
          * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -21029,7 +21029,7 @@ io.gitpod.publicapi.v1.Envvar.EnvironmentVariableOrBuilder getEnvironmentVariabl int getAdmissionValue(); /** *
    -     * admission controlls who can access the workspace and its ports.
    +     * admission controls who can access the workspace and its ports.
          * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -21423,7 +21423,7 @@ public interface TimeoutOrBuilder extends /** *
    -       * inacitivity is the maximum time of inactivity before the workspace is
    +       * inactivity is the maximum time of inactivity before the workspace is
            * stopped or paused
            * 
    * @@ -21433,7 +21433,7 @@ public interface TimeoutOrBuilder extends boolean hasInactivity(); /** *
    -       * inacitivity is the maximum time of inactivity before the workspace is
    +       * inactivity is the maximum time of inactivity before the workspace is
            * stopped or paused
            * 
    * @@ -21443,7 +21443,7 @@ public interface TimeoutOrBuilder extends com.google.protobuf.Duration getInactivity(); /** *
    -       * inacitivity is the maximum time of inactivity before the workspace is
    +       * inactivity is the maximum time of inactivity before the workspace is
            * stopped or paused
            * 
    * @@ -21453,7 +21453,7 @@ public interface TimeoutOrBuilder extends /** *
    -       * inacitivity is the maximum time of disconnection before the workspace is
    +       * disconnected is the maximum time of disconnection before the workspace is
            * stopped or paused set to zero to disable.
            * 
    * @@ -21463,7 +21463,7 @@ public interface TimeoutOrBuilder extends boolean hasDisconnected(); /** *
    -       * inacitivity is the maximum time of disconnection before the workspace is
    +       * disconnected is the maximum time of disconnection before the workspace is
            * stopped or paused set to zero to disable.
            * 
    * @@ -21473,7 +21473,7 @@ public interface TimeoutOrBuilder extends com.google.protobuf.Duration getDisconnected(); /** *
    -       * inacitivity is the maximum time of disconnection before the workspace is
    +       * disconnected is the maximum time of disconnection before the workspace is
            * stopped or paused set to zero to disable.
            * 
    * @@ -21554,7 +21554,7 @@ private Timeout() { private com.google.protobuf.Duration inactivity_; /** *
    -       * inacitivity is the maximum time of inactivity before the workspace is
    +       * inactivity is the maximum time of inactivity before the workspace is
            * stopped or paused
            * 
    * @@ -21567,7 +21567,7 @@ public boolean hasInactivity() { } /** *
    -       * inacitivity is the maximum time of inactivity before the workspace is
    +       * inactivity is the maximum time of inactivity before the workspace is
            * stopped or paused
            * 
    * @@ -21580,7 +21580,7 @@ public com.google.protobuf.Duration getInactivity() { } /** *
    -       * inacitivity is the maximum time of inactivity before the workspace is
    +       * inactivity is the maximum time of inactivity before the workspace is
            * stopped or paused
            * 
    * @@ -21595,7 +21595,7 @@ public com.google.protobuf.DurationOrBuilder getInactivityOrBuilder() { private com.google.protobuf.Duration disconnected_; /** *
    -       * inacitivity is the maximum time of disconnection before the workspace is
    +       * disconnected is the maximum time of disconnection before the workspace is
            * stopped or paused set to zero to disable.
            * 
    * @@ -21608,7 +21608,7 @@ public boolean hasDisconnected() { } /** *
    -       * inacitivity is the maximum time of disconnection before the workspace is
    +       * disconnected is the maximum time of disconnection before the workspace is
            * stopped or paused set to zero to disable.
            * 
    * @@ -21621,7 +21621,7 @@ public com.google.protobuf.Duration getDisconnected() { } /** *
    -       * inacitivity is the maximum time of disconnection before the workspace is
    +       * disconnected is the maximum time of disconnection before the workspace is
            * stopped or paused set to zero to disable.
            * 
    * @@ -22070,7 +22070,7 @@ public Builder mergeFrom( com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> inactivityBuilder_; /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22082,7 +22082,7 @@ public boolean hasInactivity() { } /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22098,7 +22098,7 @@ public com.google.protobuf.Duration getInactivity() { } /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22119,7 +22119,7 @@ public Builder setInactivity(com.google.protobuf.Duration value) { } /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22138,7 +22138,7 @@ public Builder setInactivity( } /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22164,7 +22164,7 @@ public Builder mergeInactivity(com.google.protobuf.Duration value) { } /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22182,7 +22182,7 @@ public Builder clearInactivity() { } /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22195,7 +22195,7 @@ public com.google.protobuf.Duration.Builder getInactivityBuilder() { } /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22211,7 +22211,7 @@ public com.google.protobuf.DurationOrBuilder getInactivityOrBuilder() { } /** *
    -         * inacitivity is the maximum time of inactivity before the workspace is
    +         * inactivity is the maximum time of inactivity before the workspace is
              * stopped or paused
              * 
    * @@ -22236,7 +22236,7 @@ public com.google.protobuf.DurationOrBuilder getInactivityOrBuilder() { com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> disconnectedBuilder_; /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -22248,7 +22248,7 @@ public boolean hasDisconnected() { } /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -22264,7 +22264,7 @@ public com.google.protobuf.Duration getDisconnected() { } /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -22285,7 +22285,7 @@ public Builder setDisconnected(com.google.protobuf.Duration value) { } /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -22304,7 +22304,7 @@ public Builder setDisconnected( } /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -22330,7 +22330,7 @@ public Builder mergeDisconnected(com.google.protobuf.Duration value) { } /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -22348,7 +22348,7 @@ public Builder clearDisconnected() { } /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -22361,7 +22361,7 @@ public com.google.protobuf.Duration.Builder getDisconnectedBuilder() { } /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -22377,7 +22377,7 @@ public com.google.protobuf.DurationOrBuilder getDisconnectedOrBuilder() { } /** *
    -         * inacitivity is the maximum time of disconnection before the workspace is
    +         * disconnected is the maximum time of disconnection before the workspace is
              * stopped or paused set to zero to disable.
              * 
    * @@ -23386,7 +23386,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceInitializerOrBuilder private int type_ = 0; /** *
    -     * Type denots the kind of workspace we ought to start
    +     * Type denotes the kind of workspace we ought to start
          * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -23397,7 +23397,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceInitializerOrBuilder } /** *
    -     * Type denots the kind of workspace we ought to start
    +     * Type denotes the kind of workspace we ought to start
          * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -23615,7 +23615,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSpec.TimeoutOrBuilder private int admission_ = 0; /** *
    -     * admission controlls who can access the workspace and its ports.
    +     * admission controls who can access the workspace and its ports.
          * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -23626,7 +23626,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSpec.TimeoutOrBuilder } /** *
    -     * admission controlls who can access the workspace and its ports.
    +     * admission controls who can access the workspace and its ports.
          * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -24858,7 +24858,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceInitializerOrBuilder private int type_ = 0; /** *
    -       * Type denots the kind of workspace we ought to start
    +       * Type denotes the kind of workspace we ought to start
            * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -24869,7 +24869,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceInitializerOrBuilder } /** *
    -       * Type denots the kind of workspace we ought to start
    +       * Type denotes the kind of workspace we ought to start
            * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -24884,7 +24884,7 @@ public Builder setTypeValue(int value) { } /** *
    -       * Type denots the kind of workspace we ought to start
    +       * Type denotes the kind of workspace we ought to start
            * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -24897,7 +24897,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSpec.WorkspaceType ge } /** *
    -       * Type denots the kind of workspace we ought to start
    +       * Type denotes the kind of workspace we ought to start
            * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -24915,7 +24915,7 @@ public Builder setType(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSpec. } /** *
    -       * Type denots the kind of workspace we ought to start
    +       * Type denotes the kind of workspace we ought to start
            * 
    * * .gitpod.v1.WorkspaceSpec.WorkspaceType type = 2 [json_name = "type"]; @@ -25887,7 +25887,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSpec.TimeoutOrBuilder private int admission_ = 0; /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -25898,7 +25898,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSpec.TimeoutOrBuilder } /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -25913,7 +25913,7 @@ public Builder setAdmissionValue(int value) { } /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -25926,7 +25926,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.AdmissionLevel getAdmission() } /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -25944,7 +25944,7 @@ public Builder setAdmission(io.gitpod.publicapi.v1.WorkspaceOuterClass.Admission } /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * .gitpod.v1.AdmissionLevel admission = 7 [json_name = "admission"]; @@ -26803,8 +26803,8 @@ public interface WorkspaceStatusOrBuilder extends /** *
          * version of the status update. Workspace instances themselves are
    -     * unversioned, but their statuus has different versions. The value of this
    -     * field has no semantic meaning (e.g. don't interpret it as as a timestemp),
    +     * unversioned, but their status has different versions. The value of this
    +     * field has no semantic meaning (e.g. don't interpret it as as a timestamp),
          * but it can be used to impose a partial order. If a.status_version <
          * b.status_version then a was the status before b.
          * 
    @@ -28821,8 +28821,8 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceStatus.PrebuildResult /** *
          * version of the status update. Workspace instances themselves are
    -     * unversioned, but their statuus has different versions. The value of this
    -     * field has no semantic meaning (e.g. don't interpret it as as a timestemp),
    +     * unversioned, but their status has different versions. The value of this
    +     * field has no semantic meaning (e.g. don't interpret it as as a timestamp),
          * but it can be used to impose a partial order. If a.status_version <
          * b.status_version then a was the status before b.
          * 
    @@ -29607,8 +29607,8 @@ public Builder mergeFrom( /** *
            * version of the status update. Workspace instances themselves are
    -       * unversioned, but their statuus has different versions. The value of this
    -       * field has no semantic meaning (e.g. don't interpret it as as a timestemp),
    +       * unversioned, but their status has different versions. The value of this
    +       * field has no semantic meaning (e.g. don't interpret it as as a timestamp),
            * but it can be used to impose a partial order. If a.status_version <
            * b.status_version then a was the status before b.
            * 
    @@ -29623,8 +29623,8 @@ public long getStatusVersion() { /** *
            * version of the status update. Workspace instances themselves are
    -       * unversioned, but their statuus has different versions. The value of this
    -       * field has no semantic meaning (e.g. don't interpret it as as a timestemp),
    +       * unversioned, but their status has different versions. The value of this
    +       * field has no semantic meaning (e.g. don't interpret it as as a timestamp),
            * but it can be used to impose a partial order. If a.status_version <
            * b.status_version then a was the status before b.
            * 
    @@ -29643,8 +29643,8 @@ public Builder setStatusVersion(long value) { /** *
            * version of the status update. Workspace instances themselves are
    -       * unversioned, but their statuus has different versions. The value of this
    -       * field has no semantic meaning (e.g. don't interpret it as as a timestemp),
    +       * unversioned, but their status has different versions. The value of this
    +       * field has no semantic meaning (e.g. don't interpret it as as a timestamp),
            * but it can be used to impose a partial order. If a.status_version <
            * b.status_version then a was the status before b.
            * 
    @@ -33820,7 +33820,7 @@ public enum Phase *
            * Pending means the workspace does not yet consume resources in the
            * cluster, but rather is looking for some space within the cluster. If for
    -       * example the cluster needs to scale up to accomodate the workspace, the
    +       * example the cluster needs to scale up to accommodate the workspace, the
            * workspace will be in Pending state until that happened.
            * 
    * @@ -33938,7 +33938,7 @@ public enum Phase *
            * Pending means the workspace does not yet consume resources in the
            * cluster, but rather is looking for some space within the cluster. If for
    -       * example the cluster needs to scale up to accomodate the workspace, the
    +       * example the cluster needs to scale up to accommodate the workspace, the
            * workspace will be in Pending state until that happened.
            * 
    * @@ -46767,7 +46767,7 @@ public interface UpdateWorkspaceSpecOrBuilder extends /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -46776,7 +46776,7 @@ public interface UpdateWorkspaceSpecOrBuilder extends boolean hasAdmission(); /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -46785,7 +46785,7 @@ public interface UpdateWorkspaceSpecOrBuilder extends int getAdmissionValue(); /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -46926,7 +46926,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.UpdateWorkspaceRequest.UpdateT private int admission_ = 0; /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -46937,7 +46937,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.UpdateWorkspaceRequest.UpdateT } /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -46948,7 +46948,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.UpdateWorkspaceRequest.UpdateT } /** *
    -       * admission controlls who can access the workspace and its ports.
    +       * admission controls who can access the workspace and its ports.
            * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -47563,7 +47563,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.UpdateWorkspaceRequest.UpdateT private int admission_ = 0; /** *
    -         * admission controlls who can access the workspace and its ports.
    +         * admission controls who can access the workspace and its ports.
              * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -47574,7 +47574,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.UpdateWorkspaceRequest.UpdateT } /** *
    -         * admission controlls who can access the workspace and its ports.
    +         * admission controls who can access the workspace and its ports.
              * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -47585,7 +47585,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.UpdateWorkspaceRequest.UpdateT } /** *
    -         * admission controlls who can access the workspace and its ports.
    +         * admission controls who can access the workspace and its ports.
              * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -47600,7 +47600,7 @@ public Builder setAdmissionValue(int value) { } /** *
    -         * admission controlls who can access the workspace and its ports.
    +         * admission controls who can access the workspace and its ports.
              * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -47613,7 +47613,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.AdmissionLevel getAdmission() } /** *
    -         * admission controlls who can access the workspace and its ports.
    +         * admission controls who can access the workspace and its ports.
              * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -47631,7 +47631,7 @@ public Builder setAdmission(io.gitpod.publicapi.v1.WorkspaceOuterClass.Admission } /** *
    -         * admission controlls who can access the workspace and its ports.
    +         * admission controls who can access the workspace and its ports.
              * 
    * * optional .gitpod.v1.AdmissionLevel admission = 2 [json_name = "admission"]; @@ -58645,6 +58645,36 @@ public interface WorkspaceSessionOrBuilder extends * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; */ io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder getMetricsOrBuilder(); + + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + * @return Whether the owner field is set. + */ + boolean hasOwner(); + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + * @return The owner. + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner getOwner(); + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.OwnerOrBuilder getOwnerOrBuilder(); + + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + * @return Whether the context field is set. + */ + boolean hasContext(); + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + * @return The context. + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext getContext(); + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContextOrBuilder getContextOrBuilder(); } /** * Protobuf type {@code gitpod.v1.WorkspaceSession} @@ -58684,37 +58714,77 @@ private WorkspaceSession() { io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Builder.class); } - public interface MetricsOrBuilder extends - // @@protoc_insertion_point(interface_extends:gitpod.v1.WorkspaceSession.Metrics) + public interface OwnerOrBuilder extends + // @@protoc_insertion_point(interface_extends:gitpod.v1.WorkspaceSession.Owner) com.google.protobuf.MessageOrBuilder { /** *
    -       * workspace_image_size is the size of the workspace image in bytes
    +       * id is the ID of the user who created the workspace
            * 
    * - * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; - * @return The workspaceImageSize. + * string id = 1 [json_name = "id"]; + * @return The id. */ - long getWorkspaceImageSize(); + java.lang.String getId(); + /** + *
    +       * id is the ID of the user who created the workspace
    +       * 
    + * + * string id = 1 [json_name = "id"]; + * @return The bytes for id. + */ + com.google.protobuf.ByteString + getIdBytes(); /** *
    -       * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
    +       * name is the full name of the user who created the workspace
            * 
    * - * int64 total_image_size = 2 [json_name = "totalImageSize"]; - * @return The totalImageSize. + * string name = 2 [json_name = "name"]; + * @return The name. */ - long getTotalImageSize(); + java.lang.String getName(); + /** + *
    +       * name is the full name of the user who created the workspace
    +       * 
    + * + * string name = 2 [json_name = "name"]; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + *
    +       * avatar_url is the URL of the user's avatar
    +       * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @return The avatarUrl. + */ + java.lang.String getAvatarUrl(); + /** + *
    +       * avatar_url is the URL of the user's avatar
    +       * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @return The bytes for avatarUrl. + */ + com.google.protobuf.ByteString + getAvatarUrlBytes(); } /** - * Protobuf type {@code gitpod.v1.WorkspaceSession.Metrics} + * Protobuf type {@code gitpod.v1.WorkspaceSession.Owner} */ - public static final class Metrics extends + public static final class Owner extends com.google.protobuf.GeneratedMessage implements - // @@protoc_insertion_point(message_implements:gitpod.v1.WorkspaceSession.Metrics) - MetricsOrBuilder { + // @@protoc_insertion_point(message_implements:gitpod.v1.WorkspaceSession.Owner) + OwnerOrBuilder { private static final long serialVersionUID = 0L; static { com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( @@ -58723,56 +58793,170 @@ public static final class Metrics extends /* minor= */ 27, /* patch= */ 2, /* suffix= */ "", - Metrics.class.getName()); + Owner.class.getName()); } - // Use Metrics.newBuilder() to construct. - private Metrics(com.google.protobuf.GeneratedMessage.Builder builder) { + // Use Owner.newBuilder() to construct. + private Owner(com.google.protobuf.GeneratedMessage.Builder builder) { super(builder); } - private Metrics() { + private Owner() { + id_ = ""; + name_ = ""; + avatarUrl_ = ""; } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Owner_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Owner_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder.class); + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.Builder.class); } - public static final int WORKSPACE_IMAGE_SIZE_FIELD_NUMBER = 1; - private long workspaceImageSize_ = 0L; + public static final int ID_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object id_ = ""; /** *
    -       * workspace_image_size is the size of the workspace image in bytes
    +       * id is the ID of the user who created the workspace
            * 
    * - * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; - * @return The workspaceImageSize. + * string id = 1 [json_name = "id"]; + * @return The id. */ @java.lang.Override - public long getWorkspaceImageSize() { - return workspaceImageSize_; + public java.lang.String getId() { + java.lang.Object ref = id_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + id_ = s; + return s; + } + } + /** + *
    +       * id is the ID of the user who created the workspace
    +       * 
    + * + * string id = 1 [json_name = "id"]; + * @return The bytes for id. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getIdBytes() { + java.lang.Object ref = id_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + id_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } } - public static final int TOTAL_IMAGE_SIZE_FIELD_NUMBER = 2; - private long totalImageSize_ = 0L; + public static final int NAME_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; /** *
    -       * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
    +       * name is the full name of the user who created the workspace
            * 
    * - * int64 total_image_size = 2 [json_name = "totalImageSize"]; - * @return The totalImageSize. + * string name = 2 [json_name = "name"]; + * @return The name. */ @java.lang.Override - public long getTotalImageSize() { - return totalImageSize_; + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + /** + *
    +       * name is the full name of the user who created the workspace
    +       * 
    + * + * string name = 2 [json_name = "name"]; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int AVATAR_URL_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private volatile java.lang.Object avatarUrl_ = ""; + /** + *
    +       * avatar_url is the URL of the user's avatar
    +       * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @return The avatarUrl. + */ + @java.lang.Override + public java.lang.String getAvatarUrl() { + java.lang.Object ref = avatarUrl_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + avatarUrl_ = s; + return s; + } + } + /** + *
    +       * avatar_url is the URL of the user's avatar
    +       * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @return The bytes for avatarUrl. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAvatarUrlBytes() { + java.lang.Object ref = avatarUrl_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + avatarUrl_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } } private byte memoizedIsInitialized = -1; @@ -58789,11 +58973,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (workspaceImageSize_ != 0L) { - output.writeInt64(1, workspaceImageSize_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(id_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, id_); } - if (totalImageSize_ != 0L) { - output.writeInt64(2, totalImageSize_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(avatarUrl_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, avatarUrl_); } getUnknownFields().writeTo(output); } @@ -58804,13 +58991,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (workspaceImageSize_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, workspaceImageSize_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(id_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, id_); } - if (totalImageSize_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(2, totalImageSize_); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(avatarUrl_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, avatarUrl_); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -58822,15 +59010,17 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics)) { + if (!(obj instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner)) { return super.equals(obj); } - io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics other = (io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics) obj; + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner other = (io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner) obj; - if (getWorkspaceImageSize() - != other.getWorkspaceImageSize()) return false; - if (getTotalImageSize() - != other.getTotalImageSize()) return false; + if (!getId() + .equals(other.getId())) return false; + if (!getName() + .equals(other.getName())) return false; + if (!getAvatarUrl() + .equals(other.getAvatarUrl())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -58842,55 +59032,55 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + WORKSPACE_IMAGE_SIZE_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getWorkspaceImageSize()); - hash = (37 * hash) + TOTAL_IMAGE_SIZE_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getTotalImageSize()); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + AVATAR_URL_FIELD_NUMBER; + hash = (53 * hash) + getAvatarUrl().hashCode(); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom(byte[] data) + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom(java.io.InputStream input) + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -58898,26 +59088,26 @@ public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metric .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseDelimitedFrom(java.io.InputStream input) + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseDelimitedFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -58930,7 +59120,7 @@ public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metric public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics prototype) { + public static Builder newBuilder(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -58946,26 +59136,26 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code gitpod.v1.WorkspaceSession.Metrics} + * Protobuf type {@code gitpod.v1.WorkspaceSession.Owner} */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements - // @@protoc_insertion_point(builder_implements:gitpod.v1.WorkspaceSession.Metrics) - io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder { + // @@protoc_insertion_point(builder_implements:gitpod.v1.WorkspaceSession.Owner) + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.OwnerOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Owner_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Owner_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder.class); + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.Builder.class); } - // Construct using io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.newBuilder() + // Construct using io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.newBuilder() private Builder() { } @@ -58979,25 +59169,26 @@ private Builder( public Builder clear() { super.clear(); bitField0_ = 0; - workspaceImageSize_ = 0L; - totalImageSize_ = 0L; + id_ = ""; + name_ = ""; + avatarUrl_ = ""; return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Owner_descriptor; } @java.lang.Override - public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics getDefaultInstanceForType() { - return io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance(); + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner getDefaultInstanceForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.getDefaultInstance(); } @java.lang.Override - public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics build() { - io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result = buildPartial(); + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner build() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -59005,40 +59196,3357 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics build } @java.lang.Override - public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics buildPartial() { - io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics(this); + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner buildPartial() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner result = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result) { + private void buildPartial0(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { - result.workspaceImageSize_ = workspaceImageSize_; + result.id_ = id_; } if (((from_bitField0_ & 0x00000002) != 0)) { - result.totalImageSize_ = totalImageSize_; + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.avatarUrl_ = avatarUrl_; } } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics) { - return mergeFrom((io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics)other); + if (other instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner) { + return mergeFrom((io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics other) { - if (other == io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance()) return this; - if (other.getWorkspaceImageSize() != 0L) { - setWorkspaceImageSize(other.getWorkspaceImageSize()); + public Builder mergeFrom(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner other) { + if (other == io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.getDefaultInstance()) return this; + if (!other.getId().isEmpty()) { + id_ = other.id_; + bitField0_ |= 0x00000001; + onChanged(); } - if (other.getTotalImageSize() != 0L) { - setTotalImageSize(other.getTotalImageSize()); + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getAvatarUrl().isEmpty()) { + avatarUrl_ = other.avatarUrl_; + bitField0_ |= 0x00000004; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + id_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: { + avatarUrl_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object id_ = ""; + /** + *
    +         * id is the ID of the user who created the workspace
    +         * 
    + * + * string id = 1 [json_name = "id"]; + * @return The id. + */ + public java.lang.String getId() { + java.lang.Object ref = id_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + id_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +         * id is the ID of the user who created the workspace
    +         * 
    + * + * string id = 1 [json_name = "id"]; + * @return The bytes for id. + */ + public com.google.protobuf.ByteString + getIdBytes() { + java.lang.Object ref = id_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + id_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +         * id is the ID of the user who created the workspace
    +         * 
    + * + * string id = 1 [json_name = "id"]; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + id_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
    +         * id is the ID of the user who created the workspace
    +         * 
    + * + * string id = 1 [json_name = "id"]; + * @return This builder for chaining. + */ + public Builder clearId() { + id_ = getDefaultInstance().getId(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + *
    +         * id is the ID of the user who created the workspace
    +         * 
    + * + * string id = 1 [json_name = "id"]; + * @param value The bytes for id to set. + * @return This builder for chaining. + */ + public Builder setIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + id_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object name_ = ""; + /** + *
    +         * name is the full name of the user who created the workspace
    +         * 
    + * + * string name = 2 [json_name = "name"]; + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +         * name is the full name of the user who created the workspace
    +         * 
    + * + * string name = 2 [json_name = "name"]; + * @return The bytes for name. + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +         * name is the full name of the user who created the workspace
    +         * 
    + * + * string name = 2 [json_name = "name"]; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + name_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
    +         * name is the full name of the user who created the workspace
    +         * 
    + * + * string name = 2 [json_name = "name"]; + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + *
    +         * name is the full name of the user who created the workspace
    +         * 
    + * + * string name = 2 [json_name = "name"]; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object avatarUrl_ = ""; + /** + *
    +         * avatar_url is the URL of the user's avatar
    +         * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @return The avatarUrl. + */ + public java.lang.String getAvatarUrl() { + java.lang.Object ref = avatarUrl_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + avatarUrl_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +         * avatar_url is the URL of the user's avatar
    +         * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @return The bytes for avatarUrl. + */ + public com.google.protobuf.ByteString + getAvatarUrlBytes() { + java.lang.Object ref = avatarUrl_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + avatarUrl_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +         * avatar_url is the URL of the user's avatar
    +         * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @param value The avatarUrl to set. + * @return This builder for chaining. + */ + public Builder setAvatarUrl( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + avatarUrl_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
    +         * avatar_url is the URL of the user's avatar
    +         * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @return This builder for chaining. + */ + public Builder clearAvatarUrl() { + avatarUrl_ = getDefaultInstance().getAvatarUrl(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + *
    +         * avatar_url is the URL of the user's avatar
    +         * 
    + * + * string avatar_url = 3 [json_name = "avatarUrl"]; + * @param value The bytes for avatarUrl to set. + * @return This builder for chaining. + */ + public Builder setAvatarUrlBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + avatarUrl_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:gitpod.v1.WorkspaceSession.Owner) + } + + // @@protoc_insertion_point(class_scope:gitpod.v1.WorkspaceSession.Owner) + private static final io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner(); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Owner parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface WorkspaceContextOrBuilder extends + // @@protoc_insertion_point(interface_extends:gitpod.v1.WorkspaceSession.WorkspaceContext) + com.google.protobuf.MessageOrBuilder { + + /** + *
    +       * path is the path of the context (the path following the base repository URL)
    +       * 
    + * + * string path = 1 [json_name = "path"]; + * @return The path. + */ + java.lang.String getPath(); + /** + *
    +       * path is the path of the context (the path following the base repository URL)
    +       * 
    + * + * string path = 1 [json_name = "path"]; + * @return The bytes for path. + */ + com.google.protobuf.ByteString + getPathBytes(); + + /** + *
    +       * ref is the branch or tag name of the repository
    +       * 
    + * + * string ref = 2 [json_name = "ref"]; + * @return The ref. + */ + java.lang.String getRef(); + /** + *
    +       * ref is the branch or tag name of the repository
    +       * 
    + * + * string ref = 2 [json_name = "ref"]; + * @return The bytes for ref. + */ + com.google.protobuf.ByteString + getRefBytes(); + + /** + *
    +       * ref_type is the type of the ref
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @return The enum numeric value on the wire for refType. + */ + int getRefTypeValue(); + /** + *
    +       * ref_type is the type of the ref
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @return The refType. + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType getRefType(); + + /** + *
    +       * revision is the commit hash of the context
    +       * 
    + * + * string revision = 4 [json_name = "revision"]; + * @return The revision. + */ + java.lang.String getRevision(); + /** + *
    +       * revision is the commit hash of the context
    +       * 
    + * + * string revision = 4 [json_name = "revision"]; + * @return The bytes for revision. + */ + com.google.protobuf.ByteString + getRevisionBytes(); + + /** + *
    +       * repository is the repository of the context
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + * @return Whether the repository field is set. + */ + boolean hasRepository(); + /** + *
    +       * repository is the repository of the context
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + * @return The repository. + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository getRepository(); + /** + *
    +       * repository is the repository of the context
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RepositoryOrBuilder getRepositoryOrBuilder(); + } + /** + *
    +     * WorkspaceContext is the git context from which the workspace is created
    +     * 
    + * + * Protobuf type {@code gitpod.v1.WorkspaceSession.WorkspaceContext} + */ + public static final class WorkspaceContext extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:gitpod.v1.WorkspaceSession.WorkspaceContext) + WorkspaceContextOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 27, + /* patch= */ 2, + /* suffix= */ "", + WorkspaceContext.class.getName()); + } + // Use WorkspaceContext.newBuilder() to construct. + private WorkspaceContext(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private WorkspaceContext() { + path_ = ""; + ref_ = ""; + refType_ = 0; + revision_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Builder.class); + } + + /** + * Protobuf enum {@code gitpod.v1.WorkspaceSession.WorkspaceContext.RefType} + */ + public enum RefType + implements com.google.protobuf.ProtocolMessageEnum { + /** + * REF_TYPE_UNSPECIFIED = 0; + */ + REF_TYPE_UNSPECIFIED(0), + /** + * REF_TYPE_BRANCH = 1; + */ + REF_TYPE_BRANCH(1), + /** + * REF_TYPE_TAG = 2; + */ + REF_TYPE_TAG(2), + /** + * REF_TYPE_REVISION = 3; + */ + REF_TYPE_REVISION(3), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 27, + /* patch= */ 2, + /* suffix= */ "", + RefType.class.getName()); + } + /** + * REF_TYPE_UNSPECIFIED = 0; + */ + public static final int REF_TYPE_UNSPECIFIED_VALUE = 0; + /** + * REF_TYPE_BRANCH = 1; + */ + public static final int REF_TYPE_BRANCH_VALUE = 1; + /** + * REF_TYPE_TAG = 2; + */ + public static final int REF_TYPE_TAG_VALUE = 2; + /** + * REF_TYPE_REVISION = 3; + */ + public static final int REF_TYPE_REVISION_VALUE = 3; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static RefType valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static RefType forNumber(int value) { + switch (value) { + case 0: return REF_TYPE_UNSPECIFIED; + case 1: return REF_TYPE_BRANCH; + case 2: return REF_TYPE_TAG; + case 3: return REF_TYPE_REVISION; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + RefType> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RefType findValueByNumber(int number) { + return RefType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.getDescriptor().getEnumTypes().get(0); + } + + private static final RefType[] VALUES = values(); + + public static RefType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private RefType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:gitpod.v1.WorkspaceSession.WorkspaceContext.RefType) + } + + public interface RepositoryOrBuilder extends + // @@protoc_insertion_point(interface_extends:gitpod.v1.WorkspaceSession.WorkspaceContext.Repository) + com.google.protobuf.MessageOrBuilder { + + /** + *
    +         * clone_url is the repository url as you would pass it to "git clone".
    +         * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @return The cloneUrl. + */ + java.lang.String getCloneUrl(); + /** + *
    +         * clone_url is the repository url as you would pass it to "git clone".
    +         * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @return The bytes for cloneUrl. + */ + com.google.protobuf.ByteString + getCloneUrlBytes(); + + /** + *
    +         * host is the host of the SCM
    +         * 
    + * + * string host = 2 [json_name = "host"]; + * @return The host. + */ + java.lang.String getHost(); + /** + *
    +         * host is the host of the SCM
    +         * 
    + * + * string host = 2 [json_name = "host"]; + * @return The bytes for host. + */ + com.google.protobuf.ByteString + getHostBytes(); + + /** + *
    +         * owner is the owner of the repository
    +         * 
    + * + * string owner = 3 [json_name = "owner"]; + * @return The owner. + */ + java.lang.String getOwner(); + /** + *
    +         * owner is the owner of the repository
    +         * 
    + * + * string owner = 3 [json_name = "owner"]; + * @return The bytes for owner. + */ + com.google.protobuf.ByteString + getOwnerBytes(); + + /** + *
    +         * name is the name of the repository
    +         * 
    + * + * string name = 4 [json_name = "name"]; + * @return The name. + */ + java.lang.String getName(); + /** + *
    +         * name is the name of the repository
    +         * 
    + * + * string name = 4 [json_name = "name"]; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + } + /** + * Protobuf type {@code gitpod.v1.WorkspaceSession.WorkspaceContext.Repository} + */ + public static final class Repository extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:gitpod.v1.WorkspaceSession.WorkspaceContext.Repository) + RepositoryOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 27, + /* patch= */ 2, + /* suffix= */ "", + Repository.class.getName()); + } + // Use Repository.newBuilder() to construct. + private Repository(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private Repository() { + cloneUrl_ = ""; + host_ = ""; + owner_ = ""; + name_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.Builder.class); + } + + public static final int CLONE_URL_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object cloneUrl_ = ""; + /** + *
    +         * clone_url is the repository url as you would pass it to "git clone".
    +         * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @return The cloneUrl. + */ + @java.lang.Override + public java.lang.String getCloneUrl() { + java.lang.Object ref = cloneUrl_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + cloneUrl_ = s; + return s; + } + } + /** + *
    +         * clone_url is the repository url as you would pass it to "git clone".
    +         * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @return The bytes for cloneUrl. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getCloneUrlBytes() { + java.lang.Object ref = cloneUrl_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + cloneUrl_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int HOST_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object host_ = ""; + /** + *
    +         * host is the host of the SCM
    +         * 
    + * + * string host = 2 [json_name = "host"]; + * @return The host. + */ + @java.lang.Override + public java.lang.String getHost() { + java.lang.Object ref = host_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + host_ = s; + return s; + } + } + /** + *
    +         * host is the host of the SCM
    +         * 
    + * + * string host = 2 [json_name = "host"]; + * @return The bytes for host. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getHostBytes() { + java.lang.Object ref = host_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + host_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int OWNER_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private volatile java.lang.Object owner_ = ""; + /** + *
    +         * owner is the owner of the repository
    +         * 
    + * + * string owner = 3 [json_name = "owner"]; + * @return The owner. + */ + @java.lang.Override + public java.lang.String getOwner() { + java.lang.Object ref = owner_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + owner_ = s; + return s; + } + } + /** + *
    +         * owner is the owner of the repository
    +         * 
    + * + * string owner = 3 [json_name = "owner"]; + * @return The bytes for owner. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getOwnerBytes() { + java.lang.Object ref = owner_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + owner_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int NAME_FIELD_NUMBER = 4; + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + /** + *
    +         * name is the name of the repository
    +         * 
    + * + * string name = 4 [json_name = "name"]; + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + /** + *
    +         * name is the name of the repository
    +         * 
    + * + * string name = 4 [json_name = "name"]; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(cloneUrl_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, cloneUrl_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(host_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, host_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(owner_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, owner_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, name_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(cloneUrl_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, cloneUrl_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(host_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, host_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(owner_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, owner_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, name_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository)) { + return super.equals(obj); + } + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository other = (io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository) obj; + + if (!getCloneUrl() + .equals(other.getCloneUrl())) return false; + if (!getHost() + .equals(other.getHost())) return false; + if (!getOwner() + .equals(other.getOwner())) return false; + if (!getName() + .equals(other.getName())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CLONE_URL_FIELD_NUMBER; + hash = (53 * hash) + getCloneUrl().hashCode(); + hash = (37 * hash) + HOST_FIELD_NUMBER; + hash = (53 * hash) + getHost().hashCode(); + hash = (37 * hash) + OWNER_FIELD_NUMBER; + hash = (53 * hash) + getOwner().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code gitpod.v1.WorkspaceSession.WorkspaceContext.Repository} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:gitpod.v1.WorkspaceSession.WorkspaceContext.Repository) + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RepositoryOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.Builder.class); + } + + // Construct using io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + cloneUrl_ = ""; + host_ = ""; + owner_ = ""; + name_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_descriptor; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository getDefaultInstanceForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.getDefaultInstance(); + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository build() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository buildPartial() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository result = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.cloneUrl_ = cloneUrl_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.host_ = host_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.owner_ = owner_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.name_ = name_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository) { + return mergeFrom((io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository other) { + if (other == io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.getDefaultInstance()) return this; + if (!other.getCloneUrl().isEmpty()) { + cloneUrl_ = other.cloneUrl_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getHost().isEmpty()) { + host_ = other.host_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getOwner().isEmpty()) { + owner_ = other.owner_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000008; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + cloneUrl_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + host_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: { + owner_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object cloneUrl_ = ""; + /** + *
    +           * clone_url is the repository url as you would pass it to "git clone".
    +           * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @return The cloneUrl. + */ + public java.lang.String getCloneUrl() { + java.lang.Object ref = cloneUrl_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + cloneUrl_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +           * clone_url is the repository url as you would pass it to "git clone".
    +           * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @return The bytes for cloneUrl. + */ + public com.google.protobuf.ByteString + getCloneUrlBytes() { + java.lang.Object ref = cloneUrl_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + cloneUrl_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +           * clone_url is the repository url as you would pass it to "git clone".
    +           * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @param value The cloneUrl to set. + * @return This builder for chaining. + */ + public Builder setCloneUrl( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + cloneUrl_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
    +           * clone_url is the repository url as you would pass it to "git clone".
    +           * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @return This builder for chaining. + */ + public Builder clearCloneUrl() { + cloneUrl_ = getDefaultInstance().getCloneUrl(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + *
    +           * clone_url is the repository url as you would pass it to "git clone".
    +           * 
    + * + * string clone_url = 1 [json_name = "cloneUrl"]; + * @param value The bytes for cloneUrl to set. + * @return This builder for chaining. + */ + public Builder setCloneUrlBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + cloneUrl_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object host_ = ""; + /** + *
    +           * host is the host of the SCM
    +           * 
    + * + * string host = 2 [json_name = "host"]; + * @return The host. + */ + public java.lang.String getHost() { + java.lang.Object ref = host_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + host_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +           * host is the host of the SCM
    +           * 
    + * + * string host = 2 [json_name = "host"]; + * @return The bytes for host. + */ + public com.google.protobuf.ByteString + getHostBytes() { + java.lang.Object ref = host_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + host_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +           * host is the host of the SCM
    +           * 
    + * + * string host = 2 [json_name = "host"]; + * @param value The host to set. + * @return This builder for chaining. + */ + public Builder setHost( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + host_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
    +           * host is the host of the SCM
    +           * 
    + * + * string host = 2 [json_name = "host"]; + * @return This builder for chaining. + */ + public Builder clearHost() { + host_ = getDefaultInstance().getHost(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + *
    +           * host is the host of the SCM
    +           * 
    + * + * string host = 2 [json_name = "host"]; + * @param value The bytes for host to set. + * @return This builder for chaining. + */ + public Builder setHostBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + host_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object owner_ = ""; + /** + *
    +           * owner is the owner of the repository
    +           * 
    + * + * string owner = 3 [json_name = "owner"]; + * @return The owner. + */ + public java.lang.String getOwner() { + java.lang.Object ref = owner_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + owner_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +           * owner is the owner of the repository
    +           * 
    + * + * string owner = 3 [json_name = "owner"]; + * @return The bytes for owner. + */ + public com.google.protobuf.ByteString + getOwnerBytes() { + java.lang.Object ref = owner_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + owner_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +           * owner is the owner of the repository
    +           * 
    + * + * string owner = 3 [json_name = "owner"]; + * @param value The owner to set. + * @return This builder for chaining. + */ + public Builder setOwner( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + owner_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
    +           * owner is the owner of the repository
    +           * 
    + * + * string owner = 3 [json_name = "owner"]; + * @return This builder for chaining. + */ + public Builder clearOwner() { + owner_ = getDefaultInstance().getOwner(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + *
    +           * owner is the owner of the repository
    +           * 
    + * + * string owner = 3 [json_name = "owner"]; + * @param value The bytes for owner to set. + * @return This builder for chaining. + */ + public Builder setOwnerBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + owner_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object name_ = ""; + /** + *
    +           * name is the name of the repository
    +           * 
    + * + * string name = 4 [json_name = "name"]; + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +           * name is the name of the repository
    +           * 
    + * + * string name = 4 [json_name = "name"]; + * @return The bytes for name. + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +           * name is the name of the repository
    +           * 
    + * + * string name = 4 [json_name = "name"]; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + name_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
    +           * name is the name of the repository
    +           * 
    + * + * string name = 4 [json_name = "name"]; + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + /** + *
    +           * name is the name of the repository
    +           * 
    + * + * string name = 4 [json_name = "name"]; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:gitpod.v1.WorkspaceSession.WorkspaceContext.Repository) + } + + // @@protoc_insertion_point(class_scope:gitpod.v1.WorkspaceSession.WorkspaceContext.Repository) + private static final io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository(); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Repository parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int PATH_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object path_ = ""; + /** + *
    +       * path is the path of the context (the path following the base repository URL)
    +       * 
    + * + * string path = 1 [json_name = "path"]; + * @return The path. + */ + @java.lang.Override + public java.lang.String getPath() { + java.lang.Object ref = path_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + path_ = s; + return s; + } + } + /** + *
    +       * path is the path of the context (the path following the base repository URL)
    +       * 
    + * + * string path = 1 [json_name = "path"]; + * @return The bytes for path. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getPathBytes() { + java.lang.Object ref = path_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + path_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int REF_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object ref_ = ""; + /** + *
    +       * ref is the branch or tag name of the repository
    +       * 
    + * + * string ref = 2 [json_name = "ref"]; + * @return The ref. + */ + @java.lang.Override + public java.lang.String getRef() { + java.lang.Object ref = ref_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + ref_ = s; + return s; + } + } + /** + *
    +       * ref is the branch or tag name of the repository
    +       * 
    + * + * string ref = 2 [json_name = "ref"]; + * @return The bytes for ref. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getRefBytes() { + java.lang.Object ref = ref_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + ref_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int REF_TYPE_FIELD_NUMBER = 3; + private int refType_ = 0; + /** + *
    +       * ref_type is the type of the ref
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @return The enum numeric value on the wire for refType. + */ + @java.lang.Override public int getRefTypeValue() { + return refType_; + } + /** + *
    +       * ref_type is the type of the ref
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @return The refType. + */ + @java.lang.Override public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType getRefType() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType result = io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType.forNumber(refType_); + return result == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType.UNRECOGNIZED : result; + } + + public static final int REVISION_FIELD_NUMBER = 4; + @SuppressWarnings("serial") + private volatile java.lang.Object revision_ = ""; + /** + *
    +       * revision is the commit hash of the context
    +       * 
    + * + * string revision = 4 [json_name = "revision"]; + * @return The revision. + */ + @java.lang.Override + public java.lang.String getRevision() { + java.lang.Object ref = revision_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + revision_ = s; + return s; + } + } + /** + *
    +       * revision is the commit hash of the context
    +       * 
    + * + * string revision = 4 [json_name = "revision"]; + * @return The bytes for revision. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getRevisionBytes() { + java.lang.Object ref = revision_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + revision_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int REPOSITORY_FIELD_NUMBER = 5; + private io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository repository_; + /** + *
    +       * repository is the repository of the context
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + * @return Whether the repository field is set. + */ + @java.lang.Override + public boolean hasRepository() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
    +       * repository is the repository of the context
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + * @return The repository. + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository getRepository() { + return repository_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.getDefaultInstance() : repository_; + } + /** + *
    +       * repository is the repository of the context
    +       * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RepositoryOrBuilder getRepositoryOrBuilder() { + return repository_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.getDefaultInstance() : repository_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(path_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, path_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(ref_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, ref_); + } + if (refType_ != io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType.REF_TYPE_UNSPECIFIED.getNumber()) { + output.writeEnum(3, refType_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(revision_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, revision_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(5, getRepository()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(path_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, path_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(ref_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, ref_); + } + if (refType_ != io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType.REF_TYPE_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(3, refType_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(revision_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, revision_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, getRepository()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext)) { + return super.equals(obj); + } + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext other = (io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext) obj; + + if (!getPath() + .equals(other.getPath())) return false; + if (!getRef() + .equals(other.getRef())) return false; + if (refType_ != other.refType_) return false; + if (!getRevision() + .equals(other.getRevision())) return false; + if (hasRepository() != other.hasRepository()) return false; + if (hasRepository()) { + if (!getRepository() + .equals(other.getRepository())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PATH_FIELD_NUMBER; + hash = (53 * hash) + getPath().hashCode(); + hash = (37 * hash) + REF_FIELD_NUMBER; + hash = (53 * hash) + getRef().hashCode(); + hash = (37 * hash) + REF_TYPE_FIELD_NUMBER; + hash = (53 * hash) + refType_; + hash = (37 * hash) + REVISION_FIELD_NUMBER; + hash = (53 * hash) + getRevision().hashCode(); + if (hasRepository()) { + hash = (37 * hash) + REPOSITORY_FIELD_NUMBER; + hash = (53 * hash) + getRepository().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
    +       * WorkspaceContext is the git context from which the workspace is created
    +       * 
    + * + * Protobuf type {@code gitpod.v1.WorkspaceSession.WorkspaceContext} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:gitpod.v1.WorkspaceSession.WorkspaceContext) + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContextOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Builder.class); + } + + // Construct using io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage + .alwaysUseFieldBuilders) { + getRepositoryFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + path_ = ""; + ref_ = ""; + refType_ = 0; + revision_ = ""; + repository_ = null; + if (repositoryBuilder_ != null) { + repositoryBuilder_.dispose(); + repositoryBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_descriptor; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext getDefaultInstanceForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.getDefaultInstance(); + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext build() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext buildPartial() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext result = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.path_ = path_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.ref_ = ref_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.refType_ = refType_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.revision_ = revision_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000010) != 0)) { + result.repository_ = repositoryBuilder_ == null + ? repository_ + : repositoryBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext) { + return mergeFrom((io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext other) { + if (other == io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.getDefaultInstance()) return this; + if (!other.getPath().isEmpty()) { + path_ = other.path_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getRef().isEmpty()) { + ref_ = other.ref_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.refType_ != 0) { + setRefTypeValue(other.getRefTypeValue()); + } + if (!other.getRevision().isEmpty()) { + revision_ = other.revision_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (other.hasRepository()) { + mergeRepository(other.getRepository()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + path_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + ref_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: { + refType_ = input.readEnum(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 34: { + revision_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: { + input.readMessage( + getRepositoryFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000010; + break; + } // case 42 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object path_ = ""; + /** + *
    +         * path is the path of the context (the path following the base repository URL)
    +         * 
    + * + * string path = 1 [json_name = "path"]; + * @return The path. + */ + public java.lang.String getPath() { + java.lang.Object ref = path_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + path_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +         * path is the path of the context (the path following the base repository URL)
    +         * 
    + * + * string path = 1 [json_name = "path"]; + * @return The bytes for path. + */ + public com.google.protobuf.ByteString + getPathBytes() { + java.lang.Object ref = path_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + path_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +         * path is the path of the context (the path following the base repository URL)
    +         * 
    + * + * string path = 1 [json_name = "path"]; + * @param value The path to set. + * @return This builder for chaining. + */ + public Builder setPath( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + path_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
    +         * path is the path of the context (the path following the base repository URL)
    +         * 
    + * + * string path = 1 [json_name = "path"]; + * @return This builder for chaining. + */ + public Builder clearPath() { + path_ = getDefaultInstance().getPath(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + *
    +         * path is the path of the context (the path following the base repository URL)
    +         * 
    + * + * string path = 1 [json_name = "path"]; + * @param value The bytes for path to set. + * @return This builder for chaining. + */ + public Builder setPathBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + path_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object ref_ = ""; + /** + *
    +         * ref is the branch or tag name of the repository
    +         * 
    + * + * string ref = 2 [json_name = "ref"]; + * @return The ref. + */ + public java.lang.String getRef() { + java.lang.Object ref = ref_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + ref_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +         * ref is the branch or tag name of the repository
    +         * 
    + * + * string ref = 2 [json_name = "ref"]; + * @return The bytes for ref. + */ + public com.google.protobuf.ByteString + getRefBytes() { + java.lang.Object ref = ref_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + ref_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +         * ref is the branch or tag name of the repository
    +         * 
    + * + * string ref = 2 [json_name = "ref"]; + * @param value The ref to set. + * @return This builder for chaining. + */ + public Builder setRef( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + ref_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
    +         * ref is the branch or tag name of the repository
    +         * 
    + * + * string ref = 2 [json_name = "ref"]; + * @return This builder for chaining. + */ + public Builder clearRef() { + ref_ = getDefaultInstance().getRef(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + *
    +         * ref is the branch or tag name of the repository
    +         * 
    + * + * string ref = 2 [json_name = "ref"]; + * @param value The bytes for ref to set. + * @return This builder for chaining. + */ + public Builder setRefBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + ref_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private int refType_ = 0; + /** + *
    +         * ref_type is the type of the ref
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @return The enum numeric value on the wire for refType. + */ + @java.lang.Override public int getRefTypeValue() { + return refType_; + } + /** + *
    +         * ref_type is the type of the ref
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @param value The enum numeric value on the wire for refType to set. + * @return This builder for chaining. + */ + public Builder setRefTypeValue(int value) { + refType_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
    +         * ref_type is the type of the ref
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @return The refType. + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType getRefType() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType result = io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType.forNumber(refType_); + return result == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType.UNRECOGNIZED : result; + } + /** + *
    +         * ref_type is the type of the ref
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @param value The refType to set. + * @return This builder for chaining. + */ + public Builder setRefType(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RefType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + refType_ = value.getNumber(); + onChanged(); + return this; + } + /** + *
    +         * ref_type is the type of the ref
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3 [json_name = "refType"]; + * @return This builder for chaining. + */ + public Builder clearRefType() { + bitField0_ = (bitField0_ & ~0x00000004); + refType_ = 0; + onChanged(); + return this; + } + + private java.lang.Object revision_ = ""; + /** + *
    +         * revision is the commit hash of the context
    +         * 
    + * + * string revision = 4 [json_name = "revision"]; + * @return The revision. + */ + public java.lang.String getRevision() { + java.lang.Object ref = revision_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + revision_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
    +         * revision is the commit hash of the context
    +         * 
    + * + * string revision = 4 [json_name = "revision"]; + * @return The bytes for revision. + */ + public com.google.protobuf.ByteString + getRevisionBytes() { + java.lang.Object ref = revision_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + revision_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
    +         * revision is the commit hash of the context
    +         * 
    + * + * string revision = 4 [json_name = "revision"]; + * @param value The revision to set. + * @return This builder for chaining. + */ + public Builder setRevision( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + revision_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
    +         * revision is the commit hash of the context
    +         * 
    + * + * string revision = 4 [json_name = "revision"]; + * @return This builder for chaining. + */ + public Builder clearRevision() { + revision_ = getDefaultInstance().getRevision(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + /** + *
    +         * revision is the commit hash of the context
    +         * 
    + * + * string revision = 4 [json_name = "revision"]; + * @param value The bytes for revision to set. + * @return This builder for chaining. + */ + public Builder setRevisionBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + revision_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository repository_; + private com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RepositoryOrBuilder> repositoryBuilder_; + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + * @return Whether the repository field is set. + */ + public boolean hasRepository() { + return ((bitField0_ & 0x00000010) != 0); + } + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + * @return The repository. + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository getRepository() { + if (repositoryBuilder_ == null) { + return repository_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.getDefaultInstance() : repository_; + } else { + return repositoryBuilder_.getMessage(); + } + } + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + public Builder setRepository(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository value) { + if (repositoryBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + repository_ = value; + } else { + repositoryBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + public Builder setRepository( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.Builder builderForValue) { + if (repositoryBuilder_ == null) { + repository_ = builderForValue.build(); + } else { + repositoryBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + public Builder mergeRepository(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository value) { + if (repositoryBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) && + repository_ != null && + repository_ != io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.getDefaultInstance()) { + getRepositoryBuilder().mergeFrom(value); + } else { + repository_ = value; + } + } else { + repositoryBuilder_.mergeFrom(value); + } + if (repository_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + public Builder clearRepository() { + bitField0_ = (bitField0_ & ~0x00000010); + repository_ = null; + if (repositoryBuilder_ != null) { + repositoryBuilder_.dispose(); + repositoryBuilder_ = null; + } + onChanged(); + return this; + } + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.Builder getRepositoryBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getRepositoryFieldBuilder().getBuilder(); + } + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RepositoryOrBuilder getRepositoryOrBuilder() { + if (repositoryBuilder_ != null) { + return repositoryBuilder_.getMessageOrBuilder(); + } else { + return repository_ == null ? + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.getDefaultInstance() : repository_; + } + } + /** + *
    +         * repository is the repository of the context
    +         * 
    + * + * .gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5 [json_name = "repository"]; + */ + private com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RepositoryOrBuilder> + getRepositoryFieldBuilder() { + if (repositoryBuilder_ == null) { + repositoryBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Repository.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.RepositoryOrBuilder>( + getRepository(), + getParentForChildren(), + isClean()); + repository_ = null; + } + return repositoryBuilder_; + } + + // @@protoc_insertion_point(builder_scope:gitpod.v1.WorkspaceSession.WorkspaceContext) + } + + // @@protoc_insertion_point(class_scope:gitpod.v1.WorkspaceSession.WorkspaceContext) + private static final io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext(); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public WorkspaceContext parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface MetricsOrBuilder extends + // @@protoc_insertion_point(interface_extends:gitpod.v1.WorkspaceSession.Metrics) + com.google.protobuf.MessageOrBuilder { + + /** + *
    +       * workspace_image_size is the size of the workspace image in bytes
    +       * 
    + * + * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; + * @return The workspaceImageSize. + */ + long getWorkspaceImageSize(); + + /** + *
    +       * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
    +       * 
    + * + * int64 total_image_size = 2 [json_name = "totalImageSize"]; + * @return The totalImageSize. + */ + long getTotalImageSize(); + } + /** + * Protobuf type {@code gitpod.v1.WorkspaceSession.Metrics} + */ + public static final class Metrics extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:gitpod.v1.WorkspaceSession.Metrics) + MetricsOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 27, + /* patch= */ 2, + /* suffix= */ "", + Metrics.class.getName()); + } + // Use Metrics.newBuilder() to construct. + private Metrics(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private Metrics() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder.class); + } + + public static final int WORKSPACE_IMAGE_SIZE_FIELD_NUMBER = 1; + private long workspaceImageSize_ = 0L; + /** + *
    +       * workspace_image_size is the size of the workspace image in bytes
    +       * 
    + * + * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; + * @return The workspaceImageSize. + */ + @java.lang.Override + public long getWorkspaceImageSize() { + return workspaceImageSize_; + } + + public static final int TOTAL_IMAGE_SIZE_FIELD_NUMBER = 2; + private long totalImageSize_ = 0L; + /** + *
    +       * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
    +       * 
    + * + * int64 total_image_size = 2 [json_name = "totalImageSize"]; + * @return The totalImageSize. + */ + @java.lang.Override + public long getTotalImageSize() { + return totalImageSize_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (workspaceImageSize_ != 0L) { + output.writeInt64(1, workspaceImageSize_); + } + if (totalImageSize_ != 0L) { + output.writeInt64(2, totalImageSize_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (workspaceImageSize_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, workspaceImageSize_); + } + if (totalImageSize_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, totalImageSize_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics)) { + return super.equals(obj); + } + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics other = (io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics) obj; + + if (getWorkspaceImageSize() + != other.getWorkspaceImageSize()) return false; + if (getTotalImageSize() + != other.getTotalImageSize()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + WORKSPACE_IMAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getWorkspaceImageSize()); + hash = (37 * hash) + TOTAL_IMAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getTotalImageSize()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code gitpod.v1.WorkspaceSession.Metrics} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:gitpod.v1.WorkspaceSession.Metrics) + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder.class); + } + + // Construct using io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + workspaceImageSize_ = 0L; + totalImageSize_ = 0L; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics getDefaultInstanceForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance(); + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics build() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics buildPartial() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.workspaceImageSize_ = workspaceImageSize_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.totalImageSize_ = totalImageSize_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics) { + return mergeFrom((io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics other) { + if (other == io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance()) return this; + if (other.getWorkspaceImageSize() != 0L) { + setWorkspaceImageSize(other.getWorkspaceImageSize()); + } + if (other.getTotalImageSize() != 0L) { + setTotalImageSize(other.getTotalImageSize()); } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); @@ -59454,6 +62962,58 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuil return metrics_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance() : metrics_; } + public static final int OWNER_FIELD_NUMBER = 9; + private io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner owner_; + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + * @return Whether the owner field is set. + */ + @java.lang.Override + public boolean hasOwner() { + return ((bitField0_ & 0x00000080) != 0); + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + * @return The owner. + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner getOwner() { + return owner_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.getDefaultInstance() : owner_; + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.OwnerOrBuilder getOwnerOrBuilder() { + return owner_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.getDefaultInstance() : owner_; + } + + public static final int CONTEXT_FIELD_NUMBER = 10; + private io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext context_; + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + * @return Whether the context field is set. + */ + @java.lang.Override + public boolean hasContext() { + return ((bitField0_ & 0x00000100) != 0); + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + * @return The context. + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext getContext() { + return context_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.getDefaultInstance() : context_; + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContextOrBuilder getContextOrBuilder() { + return context_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.getDefaultInstance() : context_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -59492,6 +63052,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (((bitField0_ & 0x00000040) != 0)) { output.writeMessage(8, getMetrics()); } + if (((bitField0_ & 0x00000080) != 0)) { + output.writeMessage(9, getOwner()); + } + if (((bitField0_ & 0x00000100) != 0)) { + output.writeMessage(10, getContext()); + } getUnknownFields().writeTo(output); } @@ -59532,6 +63098,14 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(8, getMetrics()); } + if (((bitField0_ & 0x00000080) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, getOwner()); + } + if (((bitField0_ & 0x00000100) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, getContext()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -59584,6 +63158,16 @@ public boolean equals(final java.lang.Object obj) { if (!getMetrics() .equals(other.getMetrics())) return false; } + if (hasOwner() != other.hasOwner()) return false; + if (hasOwner()) { + if (!getOwner() + .equals(other.getOwner())) return false; + } + if (hasContext() != other.hasContext()) return false; + if (hasContext()) { + if (!getContext() + .equals(other.getContext())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -59625,6 +63209,14 @@ public int hashCode() { hash = (37 * hash) + METRICS_FIELD_NUMBER; hash = (53 * hash) + getMetrics().hashCode(); } + if (hasOwner()) { + hash = (37 * hash) + OWNER_FIELD_NUMBER; + hash = (53 * hash) + getOwner().hashCode(); + } + if (hasContext()) { + hash = (37 * hash) + CONTEXT_FIELD_NUMBER; + hash = (53 * hash) + getContext().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -59762,6 +63354,8 @@ private void maybeForceBuilderInitialization() { getStoppingTimeFieldBuilder(); getStoppedTimeFieldBuilder(); getMetricsFieldBuilder(); + getOwnerFieldBuilder(); + getContextFieldBuilder(); } } @java.lang.Override @@ -59804,6 +63398,16 @@ public Builder clear() { metricsBuilder_.dispose(); metricsBuilder_ = null; } + owner_ = null; + if (ownerBuilder_ != null) { + ownerBuilder_.dispose(); + ownerBuilder_ = null; + } + context_ = null; + if (contextBuilder_ != null) { + contextBuilder_.dispose(); + contextBuilder_ = null; + } return this; } @@ -59883,6 +63487,18 @@ private void buildPartial0(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceS : metricsBuilder_.build(); to_bitField0_ |= 0x00000040; } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.owner_ = ownerBuilder_ == null + ? owner_ + : ownerBuilder_.build(); + to_bitField0_ |= 0x00000080; + } + if (((from_bitField0_ & 0x00000200) != 0)) { + result.context_ = contextBuilder_ == null + ? context_ + : contextBuilder_.build(); + to_bitField0_ |= 0x00000100; + } result.bitField0_ |= to_bitField0_; } @@ -59924,6 +63540,12 @@ public Builder mergeFrom(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSes if (other.hasMetrics()) { mergeMetrics(other.getMetrics()); } + if (other.hasOwner()) { + mergeOwner(other.getOwner()); + } + if (other.hasContext()) { + mergeContext(other.getContext()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -60004,6 +63626,20 @@ public Builder mergeFrom( bitField0_ |= 0x00000080; break; } // case 66 + case 74: { + input.readMessage( + getOwnerFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000100; + break; + } // case 74 + case 82: { + input.readMessage( + getContextFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000200; + break; + } // case 82 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -60940,6 +64576,248 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuil return metricsBuilder_; } + private io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner owner_; + private com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.OwnerOrBuilder> ownerBuilder_; + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + * @return Whether the owner field is set. + */ + public boolean hasOwner() { + return ((bitField0_ & 0x00000100) != 0); + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + * @return The owner. + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner getOwner() { + if (ownerBuilder_ == null) { + return owner_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.getDefaultInstance() : owner_; + } else { + return ownerBuilder_.getMessage(); + } + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + public Builder setOwner(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner value) { + if (ownerBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + owner_ = value; + } else { + ownerBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + public Builder setOwner( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.Builder builderForValue) { + if (ownerBuilder_ == null) { + owner_ = builderForValue.build(); + } else { + ownerBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + public Builder mergeOwner(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner value) { + if (ownerBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0) && + owner_ != null && + owner_ != io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.getDefaultInstance()) { + getOwnerBuilder().mergeFrom(value); + } else { + owner_ = value; + } + } else { + ownerBuilder_.mergeFrom(value); + } + if (owner_ != null) { + bitField0_ |= 0x00000100; + onChanged(); + } + return this; + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + public Builder clearOwner() { + bitField0_ = (bitField0_ & ~0x00000100); + owner_ = null; + if (ownerBuilder_ != null) { + ownerBuilder_.dispose(); + ownerBuilder_ = null; + } + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.Builder getOwnerBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return getOwnerFieldBuilder().getBuilder(); + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.OwnerOrBuilder getOwnerOrBuilder() { + if (ownerBuilder_ != null) { + return ownerBuilder_.getMessageOrBuilder(); + } else { + return owner_ == null ? + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.getDefaultInstance() : owner_; + } + } + /** + * .gitpod.v1.WorkspaceSession.Owner owner = 9 [json_name = "owner"]; + */ + private com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.OwnerOrBuilder> + getOwnerFieldBuilder() { + if (ownerBuilder_ == null) { + ownerBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Owner.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.OwnerOrBuilder>( + getOwner(), + getParentForChildren(), + isClean()); + owner_ = null; + } + return ownerBuilder_; + } + + private io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext context_; + private com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContextOrBuilder> contextBuilder_; + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + * @return Whether the context field is set. + */ + public boolean hasContext() { + return ((bitField0_ & 0x00000200) != 0); + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + * @return The context. + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext getContext() { + if (contextBuilder_ == null) { + return context_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.getDefaultInstance() : context_; + } else { + return contextBuilder_.getMessage(); + } + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + public Builder setContext(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext value) { + if (contextBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + context_ = value; + } else { + contextBuilder_.setMessage(value); + } + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + public Builder setContext( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Builder builderForValue) { + if (contextBuilder_ == null) { + context_ = builderForValue.build(); + } else { + contextBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + public Builder mergeContext(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext value) { + if (contextBuilder_ == null) { + if (((bitField0_ & 0x00000200) != 0) && + context_ != null && + context_ != io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.getDefaultInstance()) { + getContextBuilder().mergeFrom(value); + } else { + context_ = value; + } + } else { + contextBuilder_.mergeFrom(value); + } + if (context_ != null) { + bitField0_ |= 0x00000200; + onChanged(); + } + return this; + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + public Builder clearContext() { + bitField0_ = (bitField0_ & ~0x00000200); + context_ = null; + if (contextBuilder_ != null) { + contextBuilder_.dispose(); + contextBuilder_ = null; + } + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Builder getContextBuilder() { + bitField0_ |= 0x00000200; + onChanged(); + return getContextFieldBuilder().getBuilder(); + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContextOrBuilder getContextOrBuilder() { + if (contextBuilder_ != null) { + return contextBuilder_.getMessageOrBuilder(); + } else { + return context_ == null ? + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.getDefaultInstance() : context_; + } + } + /** + * .gitpod.v1.WorkspaceSession.WorkspaceContext context = 10 [json_name = "context"]; + */ + private com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContextOrBuilder> + getContextFieldBuilder() { + if (contextBuilder_ == null) { + contextBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContext.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.WorkspaceContextOrBuilder>( + getContext(), + getParentForChildren(), + isClean()); + context_ = null; + } + return contextBuilder_; + } + // @@protoc_insertion_point(builder_scope:gitpod.v1.WorkspaceSession) } @@ -61316,6 +65194,21 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession getDefaultIns private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_gitpod_v1_WorkspaceSession_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_gitpod_v1_WorkspaceSession_Owner_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_gitpod_v1_WorkspaceSession_Owner_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; private static final @@ -61596,7 +65489,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession getDefaultIns "onse\"\207\001\n\021WorkspaceSnapshot\022\016\n\002id\030\001 \001(\tR\002" + "id\022!\n\014workspace_id\030\002 \001(\tR\013workspaceId\022?\n" + "\rcreation_time\030\003 \001(\0132\032.google.protobuf.T" + - "imestampR\014creationTime\"\275\004\n\020WorkspaceSess" + + "imestampR\014creationTime\"\327\t\n\020WorkspaceSess" + "ion\022\016\n\002id\030\001 \001(\tR\002id\0222\n\tworkspace\030\002 \001(\0132\024" + ".gitpod.v1.WorkspaceR\tworkspace\022?\n\rcreat" + "ion_time\030\003 \001(\0132\032.google.protobuf.Timesta" + @@ -61608,61 +65501,78 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession getDefaultIns "ppingTime\022=\n\014stopped_time\030\007 \001(\0132\032.google" + ".protobuf.TimestampR\013stoppedTime\022=\n\007metr" + "ics\030\010 \001(\0132#.gitpod.v1.WorkspaceSession.M" + - "etricsR\007metrics\032e\n\007Metrics\0220\n\024workspace_" + - "image_size\030\001 \001(\003R\022workspaceImageSize\022(\n\020" + - "total_image_size\030\002 \001(\003R\016totalImageSize*o" + - "\n\016AdmissionLevel\022\037\n\033ADMISSION_LEVEL_UNSP" + - "ECIFIED\020\000\022\036\n\032ADMISSION_LEVEL_OWNER_ONLY\020" + - "\001\022\034\n\030ADMISSION_LEVEL_EVERYONE\020\0022\323\016\n\020Work" + - "spaceService\022Q\n\014GetWorkspace\022\036.gitpod.v1" + - ".GetWorkspaceRequest\032\037.gitpod.v1.GetWork" + - "spaceResponse\"\000\022k\n\024WatchWorkspaceStatus\022" + - "&.gitpod.v1.WatchWorkspaceStatusRequest\032" + - "\'.gitpod.v1.WatchWorkspaceStatusResponse" + - "\"\0000\001\022W\n\016ListWorkspaces\022 .gitpod.v1.ListW" + - "orkspacesRequest\032!.gitpod.v1.ListWorkspa" + - "cesResponse\"\000\022l\n\025ListWorkspaceSessions\022\'" + - ".gitpod.v1.ListWorkspaceSessionsRequest\032" + - "(.gitpod.v1.ListWorkspaceSessionsRespons" + - "e\"\000\022r\n\027CreateAndStartWorkspace\022).gitpod." + - "v1.CreateAndStartWorkspaceRequest\032*.gitp" + - "od.v1.CreateAndStartWorkspaceResponse\"\000\022" + - "W\n\016StartWorkspace\022 .gitpod.v1.StartWorks" + - "paceRequest\032!.gitpod.v1.StartWorkspaceRe" + - "sponse\"\000\022Z\n\017UpdateWorkspace\022!.gitpod.v1." + - "UpdateWorkspaceRequest\032\".gitpod.v1.Updat" + - "eWorkspaceResponse\"\000\022T\n\rStopWorkspace\022\037." + - "gitpod.v1.StopWorkspaceRequest\032 .gitpod." + - "v1.StopWorkspaceResponse\"\000\022Z\n\017DeleteWork" + - "space\022!.gitpod.v1.DeleteWorkspaceRequest" + - "\032\".gitpod.v1.DeleteWorkspaceResponse\"\000\022i" + - "\n\024ListWorkspaceClasses\022&.gitpod.v1.ListW" + - "orkspaceClassesRequest\032\'.gitpod.v1.ListW" + - "orkspaceClassesResponse\"\000\022Z\n\017ParseContex" + - "tURL\022!.gitpod.v1.ParseContextURLRequest\032" + - "\".gitpod.v1.ParseContextURLResponse\"\000\022u\n" + - "\030GetWorkspaceDefaultImage\022*.gitpod.v1.Ge" + - "tWorkspaceDefaultImageRequest\032+.gitpod.v" + - "1.GetWorkspaceDefaultImageResponse\"\000\022T\n\r" + - "SendHeartBeat\022\037.gitpod.v1.SendHeartBeatR" + - "equest\032 .gitpod.v1.SendHeartBeatResponse" + - "\"\000\022o\n\026GetWorkspaceOwnerToken\022(.gitpod.v1" + - ".GetWorkspaceOwnerTokenRequest\032).gitpod." + - "v1.GetWorkspaceOwnerTokenResponse\"\000\022\204\001\n\035" + - "GetWorkspaceEditorCredentials\022/.gitpod.v" + - "1.GetWorkspaceEditorCredentialsRequest\0320" + - ".gitpod.v1.GetWorkspaceEditorCredentials" + - "Response\"\000\022r\n\027CreateWorkspaceSnapshot\022)." + - "gitpod.v1.CreateWorkspaceSnapshotRequest" + - "\032*.gitpod.v1.CreateWorkspaceSnapshotResp" + - "onse\"\000\022u\n\030WaitForWorkspaceSnapshot\022*.git" + - "pod.v1.WaitForWorkspaceSnapshotRequest\032+" + - ".gitpod.v1.WaitForWorkspaceSnapshotRespo" + - "nse\"\000\022f\n\023UpdateWorkspacePort\022%.gitpod.v1" + - ".UpdateWorkspacePortRequest\032&.gitpod.v1." + - "UpdateWorkspacePortResponse\"\000BQ\n\026io.gitp" + - "od.publicapi.v1Z7github.com/gitpod-io/gi" + - "tpod/components/public-api/go/v1b\006proto3" + "etricsR\007metrics\0227\n\005owner\030\t \001(\0132!.gitpod." + + "v1.WorkspaceSession.OwnerR\005owner\022F\n\007cont" + + "ext\030\n \001(\0132,.gitpod.v1.WorkspaceSession.W" + + "orkspaceContextR\007context\032J\n\005Owner\022\016\n\002id\030" + + "\001 \001(\tR\002id\022\022\n\004name\030\002 \001(\tR\004name\022\035\n\navatar_" + + "url\030\003 \001(\tR\tavatarUrl\032\312\003\n\020WorkspaceContex" + + "t\022\022\n\004path\030\001 \001(\tR\004path\022\020\n\003ref\030\002 \001(\tR\003ref\022" + + "O\n\010ref_type\030\003 \001(\01624.gitpod.v1.WorkspaceS" + + "ession.WorkspaceContext.RefTypeR\007refType" + + "\022\032\n\010revision\030\004 \001(\tR\010revision\022W\n\nreposito" + + "ry\030\005 \001(\01327.gitpod.v1.WorkspaceSession.Wo" + + "rkspaceContext.RepositoryR\nrepository\032g\n" + + "\nRepository\022\033\n\tclone_url\030\001 \001(\tR\010cloneUrl" + + "\022\022\n\004host\030\002 \001(\tR\004host\022\024\n\005owner\030\003 \001(\tR\005own" + + "er\022\022\n\004name\030\004 \001(\tR\004name\"a\n\007RefType\022\030\n\024REF" + + "_TYPE_UNSPECIFIED\020\000\022\023\n\017REF_TYPE_BRANCH\020\001" + + "\022\020\n\014REF_TYPE_TAG\020\002\022\025\n\021REF_TYPE_REVISION\020" + + "\003\032e\n\007Metrics\0220\n\024workspace_image_size\030\001 \001" + + "(\003R\022workspaceImageSize\022(\n\020total_image_si" + + "ze\030\002 \001(\003R\016totalImageSize*o\n\016AdmissionLev" + + "el\022\037\n\033ADMISSION_LEVEL_UNSPECIFIED\020\000\022\036\n\032A" + + "DMISSION_LEVEL_OWNER_ONLY\020\001\022\034\n\030ADMISSION" + + "_LEVEL_EVERYONE\020\0022\323\016\n\020WorkspaceService\022Q" + + "\n\014GetWorkspace\022\036.gitpod.v1.GetWorkspaceR" + + "equest\032\037.gitpod.v1.GetWorkspaceResponse\"" + + "\000\022k\n\024WatchWorkspaceStatus\022&.gitpod.v1.Wa" + + "tchWorkspaceStatusRequest\032\'.gitpod.v1.Wa" + + "tchWorkspaceStatusResponse\"\0000\001\022W\n\016ListWo" + + "rkspaces\022 .gitpod.v1.ListWorkspacesReque" + + "st\032!.gitpod.v1.ListWorkspacesResponse\"\000\022" + + "l\n\025ListWorkspaceSessions\022\'.gitpod.v1.Lis" + + "tWorkspaceSessionsRequest\032(.gitpod.v1.Li" + + "stWorkspaceSessionsResponse\"\000\022r\n\027CreateA" + + "ndStartWorkspace\022).gitpod.v1.CreateAndSt" + + "artWorkspaceRequest\032*.gitpod.v1.CreateAn" + + "dStartWorkspaceResponse\"\000\022W\n\016StartWorksp" + + "ace\022 .gitpod.v1.StartWorkspaceRequest\032!." + + "gitpod.v1.StartWorkspaceResponse\"\000\022Z\n\017Up" + + "dateWorkspace\022!.gitpod.v1.UpdateWorkspac" + + "eRequest\032\".gitpod.v1.UpdateWorkspaceResp" + + "onse\"\000\022T\n\rStopWorkspace\022\037.gitpod.v1.Stop" + + "WorkspaceRequest\032 .gitpod.v1.StopWorkspa" + + "ceResponse\"\000\022Z\n\017DeleteWorkspace\022!.gitpod" + + ".v1.DeleteWorkspaceRequest\032\".gitpod.v1.D" + + "eleteWorkspaceResponse\"\000\022i\n\024ListWorkspac" + + "eClasses\022&.gitpod.v1.ListWorkspaceClasse" + + "sRequest\032\'.gitpod.v1.ListWorkspaceClasse" + + "sResponse\"\000\022Z\n\017ParseContextURL\022!.gitpod." + + "v1.ParseContextURLRequest\032\".gitpod.v1.Pa" + + "rseContextURLResponse\"\000\022u\n\030GetWorkspaceD" + + "efaultImage\022*.gitpod.v1.GetWorkspaceDefa" + + "ultImageRequest\032+.gitpod.v1.GetWorkspace" + + "DefaultImageResponse\"\000\022T\n\rSendHeartBeat\022" + + "\037.gitpod.v1.SendHeartBeatRequest\032 .gitpo" + + "d.v1.SendHeartBeatResponse\"\000\022o\n\026GetWorks" + + "paceOwnerToken\022(.gitpod.v1.GetWorkspaceO" + + "wnerTokenRequest\032).gitpod.v1.GetWorkspac" + + "eOwnerTokenResponse\"\000\022\204\001\n\035GetWorkspaceEd" + + "itorCredentials\022/.gitpod.v1.GetWorkspace" + + "EditorCredentialsRequest\0320.gitpod.v1.Get" + + "WorkspaceEditorCredentialsResponse\"\000\022r\n\027" + + "CreateWorkspaceSnapshot\022).gitpod.v1.Crea" + + "teWorkspaceSnapshotRequest\032*.gitpod.v1.C" + + "reateWorkspaceSnapshotResponse\"\000\022u\n\030Wait" + + "ForWorkspaceSnapshot\022*.gitpod.v1.WaitFor" + + "WorkspaceSnapshotRequest\032+.gitpod.v1.Wai" + + "tForWorkspaceSnapshotResponse\"\000\022f\n\023Updat" + + "eWorkspacePort\022%.gitpod.v1.UpdateWorkspa" + + "cePortRequest\032&.gitpod.v1.UpdateWorkspac" + + "ePortResponse\"\000BQ\n\026io.gitpod.publicapi.v" + + "1Z7github.com/gitpod-io/gitpod/component" + + "s/public-api/go/v1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -62062,9 +65972,27 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession getDefaultIns internal_static_gitpod_v1_WorkspaceSession_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_gitpod_v1_WorkspaceSession_descriptor, - new java.lang.String[] { "Id", "Workspace", "CreationTime", "DeployedTime", "StartedTime", "StoppingTime", "StoppedTime", "Metrics", }); - internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor = + new java.lang.String[] { "Id", "Workspace", "CreationTime", "DeployedTime", "StartedTime", "StoppingTime", "StoppedTime", "Metrics", "Owner", "Context", }); + internal_static_gitpod_v1_WorkspaceSession_Owner_descriptor = internal_static_gitpod_v1_WorkspaceSession_descriptor.getNestedTypes().get(0); + internal_static_gitpod_v1_WorkspaceSession_Owner_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_gitpod_v1_WorkspaceSession_Owner_descriptor, + new java.lang.String[] { "Id", "Name", "AvatarUrl", }); + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_descriptor = + internal_static_gitpod_v1_WorkspaceSession_descriptor.getNestedTypes().get(1); + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_descriptor, + new java.lang.String[] { "Path", "Ref", "RefType", "Revision", "Repository", }); + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_descriptor = + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_descriptor.getNestedTypes().get(0); + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_gitpod_v1_WorkspaceSession_WorkspaceContext_Repository_descriptor, + new java.lang.String[] { "CloneUrl", "Host", "Owner", "Name", }); + internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor = + internal_static_gitpod_v1_WorkspaceSession_descriptor.getNestedTypes().get(2); internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor, diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.golden b/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.golden index a87fcdc95bea0b..0dd07916581932 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.golden +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.golden @@ -1,6 +1,6 @@ { "result": { - "id": "", + "id": "226695b4-f10a-471a-a219-9b657645bf78", "workspace": { "id": "akosyakov-parceldemo-4crqn25qlwi", "metadata": { @@ -89,6 +89,23 @@ "metrics": { "workspaceImageSize": "25600000", "totalImageSize": "35600000" + }, + "owner": { + "id": "123", + "name": "Kum Quat", + "avatarUrl": "" + }, + "context": { + "path": "", + "ref": "master", + "refType": "REF_TYPE_BRANCH", + "revision": "60dbf818194082ef1a368bacd49cfd25a34c9256", + "repository": { + "cloneUrl": "https://github.com/akosyakov/parcel-demo.git", + "host": "github.com", + "owner": "akosyakov", + "name": "parcel-demo" + } } }, "err": "" diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.golden b/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.golden index 1e379c588d737c..ed6c40f640a7de 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.golden +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.golden @@ -1,6 +1,6 @@ { "result": { - "id": "", + "id": "8e8c7061-f312-4265-8d78-d824c0470dde", "workspace": { "id": "sveneffting-2048intermi-5vb9hvqev88", "metadata": { @@ -91,6 +91,23 @@ "metrics": { "workspaceImageSize": "25600000", "totalImageSize": "0" + }, + "owner": { + "id": "123", + "name": "Kum Quat", + "avatarUrl": "" + }, + "context": { + "path": "", + "ref": "master", + "refType": "REF_TYPE_BRANCH", + "revision": "aac9c200a79e37ebe216bb90c829d5ab2771f2ee", + "repository": { + "cloneUrl": "https://github.com/svenefftinge/2048-in-terminal.git", + "host": "github.com", + "owner": "svenefftinge", + "name": "2048-in-terminal" + } } }, "err": "" diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.golden b/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.golden index fb76ed3629bb2a..d1e65f14c847e8 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.golden +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.golden @@ -1,6 +1,6 @@ { "result": { - "id": "", + "id": "dfdd9f48-2176-47b5-9c38-c85d099c8e6d", "workspace": { "id": "sveneffting-2048intermi-5vb9hvqev88", "metadata": { @@ -91,6 +91,23 @@ "metrics": { "workspaceImageSize": "0", "totalImageSize": "0" + }, + "owner": { + "id": "123", + "name": "Kum Quat", + "avatarUrl": "" + }, + "context": { + "path": "", + "ref": "master", + "refType": "REF_TYPE_BRANCH", + "revision": "aac9c200a79e37ebe216bb90c829d5ab2771f2ee", + "repository": { + "cloneUrl": "https://github.com/svenefftinge/2048-in-terminal.git", + "host": "github.com", + "owner": "svenefftinge", + "name": "2048-in-terminal" + } } }, "err": "" diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_4.golden b/components/public-api/typescript-common/fixtures/toWorkspaceSession_4.golden index f9a8d050976f9e..916e99fea97ccf 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_4.golden +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_4.golden @@ -1,6 +1,6 @@ { "result": { - "id": "", + "id": "36cd2611-fd7e-4462-832c-4122bd4ce6ef", "workspace": { "id": "sveneffting-2048intermi-5vb9hvqev88", "metadata": { @@ -91,6 +91,23 @@ "metrics": { "workspaceImageSize": "0", "totalImageSize": "0" + }, + "owner": { + "id": "123", + "name": "Kum Quat", + "avatarUrl": "" + }, + "context": { + "path": "", + "ref": "master", + "refType": "REF_TYPE_BRANCH", + "revision": "aac9c200a79e37ebe216bb90c829d5ab2771f2ee", + "repository": { + "cloneUrl": "https://github.com/svenefftinge/2048-in-terminal.git", + "host": "github.com", + "owner": "svenefftinge", + "name": "2048-in-terminal" + } } }, "err": "" diff --git a/components/public-api/typescript-common/src/public-api-converter.spec.ts b/components/public-api/typescript-common/src/public-api-converter.spec.ts index 6c885a81f275ac..93c2a03d9646a3 100644 --- a/components/public-api/typescript-common/src/public-api-converter.spec.ts +++ b/components/public-api/typescript-common/src/public-api-converter.spec.ts @@ -28,7 +28,7 @@ import { startFixtureTest } from "./fixtures.spec"; import { OrganizationRole } from "@gitpod/public-api/lib/gitpod/v1/organization_pb"; import { BranchMatchingStrategy } from "@gitpod/public-api/lib/gitpod/v1/configuration_pb"; import { AuthProviderType } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb"; -import { Workspace, WorkspacePhase_Phase } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; +import { Workspace, WorkspacePhase_Phase, WorkspaceSession_Owner } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { WorkspaceAndInstance } from "@gitpod/gitpod-protocol"; describe("PublicAPIConverter", () => { @@ -86,7 +86,7 @@ describe("PublicAPIConverter", () => { input.arg1, input.arg2 ? Workspace.fromJson(input.arg2) : undefined, ); - // Use toJsonString since JSON.stringify cann't decode BigInt + // Use toJsonString since JSON.stringify can't decode BigInt return JSON.parse(result.toJsonString()); }); }); @@ -106,7 +106,10 @@ describe("PublicAPIConverter", () => { it("toWorkspaceSession", async () => { await startFixtureTest("../fixtures/toWorkspaceSession_*.json", async (input) => - converter.toWorkspaceSession(input), + converter.toWorkspaceSession(input, new WorkspaceSession_Owner({ + id: "123", + name: "Kum Quat" + })), ); }); diff --git a/components/public-api/typescript-common/src/public-api-converter.ts b/components/public-api/typescript-common/src/public-api-converter.ts index eaa97558260671..94ffb10c2177fc 100644 --- a/components/public-api/typescript-common/src/public-api-converter.ts +++ b/components/public-api/typescript-common/src/public-api-converter.ts @@ -40,6 +40,8 @@ import { WorkspaceInfo, WorkspaceSession as WorkspaceSessionProtocol, Configuration as GitpodServerInstallationConfiguration, + NavigatorContext, + RefType, } from "@gitpod/gitpod-protocol/lib/protocol"; import { AuditLog as AuditLogProtocol } from "@gitpod/gitpod-protocol/lib/audit-log"; import { @@ -165,6 +167,10 @@ import { WorkspaceStatus, WorkspaceStatus_PrebuildResult, WorkspaceStatus_WorkspaceConditions, + WorkspaceSession_Owner, + WorkspaceSession_WorkspaceContext, + WorkspaceSession_WorkspaceContext_Repository, + WorkspaceSession_WorkspaceContext_RefType } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { BigIntToJson } from "@gitpod/gitpod-protocol/lib/util/stringify"; import { getPrebuildLogPath } from "./prebuild-utils"; @@ -181,7 +187,7 @@ export type PartialConfiguration = DeepPartial & Pick { initializer?: WorkspaceInitializer; /** - * Type denots the kind of workspace we ought to start + * Type denotes the kind of workspace we ought to start * * @generated from field: gitpod.v1.WorkspaceSpec.WorkspaceType type = 2; */ @@ -1352,7 +1352,7 @@ export class WorkspaceSpec extends Message { timeout?: WorkspaceSpec_Timeout; /** - * admission controlls who can access the workspace and its ports. + * admission controls who can access the workspace and its ports. * * @generated from field: gitpod.v1.AdmissionLevel admission = 7; */ @@ -1484,7 +1484,7 @@ proto3.util.setEnumType(WorkspaceSpec_WorkspaceType, "gitpod.v1.WorkspaceSpec.Wo */ export class WorkspaceSpec_Timeout extends Message { /** - * inacitivity is the maximum time of inactivity before the workspace is + * inactivity is the maximum time of inactivity before the workspace is * stopped or paused * * @generated from field: google.protobuf.Duration inactivity = 1; @@ -1492,7 +1492,7 @@ export class WorkspaceSpec_Timeout extends Message { inactivity?: Duration; /** - * inacitivity is the maximum time of disconnection before the workspace is + * disconnected is the maximum time of disconnection before the workspace is * stopped or paused set to zero to disable. * * @generated from field: google.protobuf.Duration disconnected = 2; @@ -1593,8 +1593,8 @@ export class WorkspaceSpec_GitSpec extends Message { export class WorkspaceStatus extends Message { /** * version of the status update. Workspace instances themselves are - * unversioned, but their statuus has different versions. The value of this - * field has no semantic meaning (e.g. don't interpret it as as a timestemp), + * unversioned, but their status has different versions. The value of this + * field has no semantic meaning (e.g. don't interpret it as as a timestamp), * but it can be used to impose a partial order. If a.status_version < * b.status_version then a was the status before b. * @@ -2108,7 +2108,7 @@ export enum WorkspacePhase_Phase { /** * Pending means the workspace does not yet consume resources in the * cluster, but rather is looking for some space within the cluster. If for - * example the cluster needs to scale up to accomodate the workspace, the + * example the cluster needs to scale up to accommodate the workspace, the * workspace will be in Pending state until that happened. * * @generated from enum value: PHASE_PENDING = 3; @@ -2996,7 +2996,7 @@ export class UpdateWorkspaceRequest_UpdateWorkspaceSpec extends Message { */ metrics?: WorkspaceSession_Metrics; + /** + * @generated from field: gitpod.v1.WorkspaceSession.Owner owner = 9; + */ + owner?: WorkspaceSession_Owner; + + /** + * @generated from field: gitpod.v1.WorkspaceSession.WorkspaceContext context = 10; + */ + context?: WorkspaceSession_WorkspaceContext; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -3717,6 +3727,8 @@ export class WorkspaceSession extends Message { { no: 6, name: "stopping_time", kind: "message", T: Timestamp }, { no: 7, name: "stopped_time", kind: "message", T: Timestamp }, { no: 8, name: "metrics", kind: "message", T: WorkspaceSession_Metrics }, + { no: 9, name: "owner", kind: "message", T: WorkspaceSession_Owner }, + { no: 10, name: "context", kind: "message", T: WorkspaceSession_WorkspaceContext }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSession { @@ -3736,6 +3748,229 @@ export class WorkspaceSession extends Message { } } +/** + * @generated from message gitpod.v1.WorkspaceSession.Owner + */ +export class WorkspaceSession_Owner extends Message { + /** + * id is the ID of the user who created the workspace + * + * @generated from field: string id = 1; + */ + id = ""; + + /** + * name is the full name of the user who created the workspace + * + * @generated from field: string name = 2; + */ + name = ""; + + /** + * avatar_url is the URL of the user's avatar + * + * @generated from field: string avatar_url = 3; + */ + avatarUrl = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceSession.Owner"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "avatar_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSession_Owner { + return new WorkspaceSession_Owner().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceSession_Owner { + return new WorkspaceSession_Owner().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceSession_Owner { + return new WorkspaceSession_Owner().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceSession_Owner | PlainMessage | undefined, b: WorkspaceSession_Owner | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceSession_Owner, a, b); + } +} + +/** + * WorkspaceContext is the git context from which the workspace is created + * + * @generated from message gitpod.v1.WorkspaceSession.WorkspaceContext + */ +export class WorkspaceSession_WorkspaceContext extends Message { + /** + * path is the path of the context (the path following the base repository URL) + * + * @generated from field: string path = 1; + */ + path = ""; + + /** + * ref is the branch or tag name of the repository + * + * @generated from field: string ref = 2; + */ + ref = ""; + + /** + * ref_type is the type of the ref + * + * @generated from field: gitpod.v1.WorkspaceSession.WorkspaceContext.RefType ref_type = 3; + */ + refType = WorkspaceSession_WorkspaceContext_RefType.UNSPECIFIED; + + /** + * revision is the commit hash of the context + * + * @generated from field: string revision = 4; + */ + revision = ""; + + /** + * repository is the repository of the context + * + * @generated from field: gitpod.v1.WorkspaceSession.WorkspaceContext.Repository repository = 5; + */ + repository?: WorkspaceSession_WorkspaceContext_Repository; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceSession.WorkspaceContext"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "path", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "ref", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "ref_type", kind: "enum", T: proto3.getEnumType(WorkspaceSession_WorkspaceContext_RefType) }, + { no: 4, name: "revision", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 5, name: "repository", kind: "message", T: WorkspaceSession_WorkspaceContext_Repository }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSession_WorkspaceContext { + return new WorkspaceSession_WorkspaceContext().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceSession_WorkspaceContext { + return new WorkspaceSession_WorkspaceContext().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceSession_WorkspaceContext { + return new WorkspaceSession_WorkspaceContext().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceSession_WorkspaceContext | PlainMessage | undefined, b: WorkspaceSession_WorkspaceContext | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceSession_WorkspaceContext, a, b); + } +} + +/** + * @generated from enum gitpod.v1.WorkspaceSession.WorkspaceContext.RefType + */ +export enum WorkspaceSession_WorkspaceContext_RefType { + /** + * @generated from enum value: REF_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: REF_TYPE_BRANCH = 1; + */ + BRANCH = 1, + + /** + * @generated from enum value: REF_TYPE_TAG = 2; + */ + TAG = 2, + + /** + * @generated from enum value: REF_TYPE_REVISION = 3; + */ + REVISION = 3, +} +// Retrieve enum metadata with: proto3.getEnumType(WorkspaceSession_WorkspaceContext_RefType) +proto3.util.setEnumType(WorkspaceSession_WorkspaceContext_RefType, "gitpod.v1.WorkspaceSession.WorkspaceContext.RefType", [ + { no: 0, name: "REF_TYPE_UNSPECIFIED" }, + { no: 1, name: "REF_TYPE_BRANCH" }, + { no: 2, name: "REF_TYPE_TAG" }, + { no: 3, name: "REF_TYPE_REVISION" }, +]); + +/** + * @generated from message gitpod.v1.WorkspaceSession.WorkspaceContext.Repository + */ +export class WorkspaceSession_WorkspaceContext_Repository extends Message { + /** + * clone_url is the repository url as you would pass it to "git clone". + * + * @generated from field: string clone_url = 1; + */ + cloneUrl = ""; + + /** + * host is the host of the SCM + * + * @generated from field: string host = 2; + */ + host = ""; + + /** + * owner is the owner of the repository + * + * @generated from field: string owner = 3; + */ + owner = ""; + + /** + * name is the name of the repository + * + * @generated from field: string name = 4; + */ + name = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceSession.WorkspaceContext.Repository"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "clone_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "host", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "owner", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSession_WorkspaceContext_Repository { + return new WorkspaceSession_WorkspaceContext_Repository().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceSession_WorkspaceContext_Repository { + return new WorkspaceSession_WorkspaceContext_Repository().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceSession_WorkspaceContext_Repository { + return new WorkspaceSession_WorkspaceContext_Repository().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceSession_WorkspaceContext_Repository | PlainMessage | undefined, b: WorkspaceSession_WorkspaceContext_Repository | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceSession_WorkspaceContext_Repository, a, b); + } +} + /** * @generated from message gitpod.v1.WorkspaceSession.Metrics */ diff --git a/components/server/src/api/workspace-service-api.ts b/components/server/src/api/workspace-service-api.ts index 45204d0a2fa394..0066f65822a090 100644 --- a/components/server/src/api/workspace-service-api.ts +++ b/components/server/src/api/workspace-service-api.ts @@ -46,11 +46,12 @@ import { WorkspacePort_Protocol, ListWorkspaceSessionsRequest, ListWorkspaceSessionsResponse, + WorkspaceSession_Owner, } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { inject, injectable } from "inversify"; import { WorkspaceService } from "../workspace/workspace-service"; import { PublicAPIConverter } from "@gitpod/public-api-common/lib/public-api-converter"; -import { ctxClientRegion, ctxSignal, ctxUserId } from "../util/request-context"; +import { ctxClientRegion, ctxSignal, ctxUserId, runWithSubjectId } from "../util/request-context"; import { parsePagination } from "@gitpod/public-api-common/lib/public-api-pagination"; import { PaginationResponse } from "@gitpod/public-api/lib/gitpod/v1/pagination_pb"; import { validate as uuidValidate } from "uuid"; @@ -59,6 +60,7 @@ import { ContextService } from "../workspace/context-service"; import { UserService } from "../user/user-service"; import { ContextParser } from "../workspace/context-parser-service"; import { matchesNewWorkspaceIdExactly as isWorkspaceId } from "@gitpod/gitpod-protocol/lib/util/parse-workspace-id"; +import { SYSTEM_USER, SYSTEM_USER_ID } from "../authorization/authorizer"; @injectable() export class WorkspaceServiceAPI implements ServiceImpl { @@ -132,6 +134,7 @@ export class WorkspaceServiceAPI implements ServiceImpl(); const results = await this.workspaceService.listWorkspaceSessions( ctxUserId(), req.organizationId, @@ -140,11 +143,29 @@ export class WorkspaceServiceAPI implements ServiceImpl + this.userService.findUserById(SYSTEM_USER_ID, ownerId), + ); + ownerMeta.set( + ownerId, + new WorkspaceSession_Owner({ + id: ownerId, + name: user.fullName, + avatarUrl: user.avatarUrl, + }), + ); + } + } + } const response = new ListWorkspaceSessionsResponse(); - response.workspaceSessions = results.map((session) => this.apiConverter.toWorkspaceSession(session)); - response.pagination = new PaginationResponse(); - response.pagination.total = resultTotal; + response.workspaceSessions = results.map((session) => + this.apiConverter.toWorkspaceSession(session, ownerMeta.get(session.workspace.ownerId)!), + ); + return response; } diff --git a/components/server/src/workspace/context-parser.ts b/components/server/src/workspace/context-parser.ts index 36fd684a5d5e73..99995903e54d3a 100644 --- a/components/server/src/workspace/context-parser.ts +++ b/components/server/src/workspace/context-parser.ts @@ -50,11 +50,11 @@ export abstract class AbstractContextParser implements IContextParser { const host = this.host; // as per contract, cf. `canHandle(user, contextURL)` - const lenghtOfRelativePath = host.split("/").length - 1; // e.g. "123.123.123.123/gitlab" => length of 1 - if (lenghtOfRelativePath > 0) { + const lengthOfRelativePath = host.split("/").length - 1; // e.g. "123.123.123.123/gitlab" => length of 1 + if (lengthOfRelativePath > 0) { // remove segments from the path to be consider further, which belong to the relative location of the host // cf. https://github.com/gitpod-io/gitpod/issues/2637 - segments.splice(0, lenghtOfRelativePath); + segments.splice(0, lengthOfRelativePath); } const owner: string = segments[0]; diff --git a/components/server/src/workspace/workspace-service.ts b/components/server/src/workspace/workspace-service.ts index 5605f51e88768d..be785092be7ec1 100644 --- a/components/server/src/workspace/workspace-service.ts +++ b/components/server/src/workspace/workspace-service.ts @@ -234,9 +234,7 @@ export class WorkspaceService { async getWorkspace(userId: string, workspaceId: string): Promise { const workspace = await this.doGetWorkspace(userId, workspaceId); - - const latestInstancePromise = this.db.findCurrentInstance(workspaceId); - const latestInstance = await latestInstancePromise; + const latestInstance = await this.db.findCurrentInstance(workspaceId); return { workspace, @@ -1323,7 +1321,7 @@ export class WorkspaceService { const workspace = await this.doGetWorkspace(userId, workspaceId); await check(instance, workspace); - const wasClosed = !!(options && options.wasClosed); + const wasClosed = options.wasClosed ?? false; await this.db.updateLastHeartbeat(instanceId, userId, new Date(), wasClosed); const req = new MarkActiveRequest(); diff --git a/yarn.lock b/yarn.lock index c6a52058d73d43..316c6cbf364df0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2515,6 +2515,21 @@ resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2" integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA== +"@radix-ui/react-accordion@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz#5c942c42c24267376b26204ec6847b17d15659b3" + integrity sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collapsible" "1.1.1" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-arrow@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz#744f388182d360b86285217e43b6c63633f39e7a" @@ -2522,6 +2537,20 @@ dependencies: "@radix-ui/react-primitive" "2.0.0" +"@radix-ui/react-collapsible@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz#1382cc9ec48f8b473c14f3779d317f0cdf6da5e9" + integrity sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-presence" "1.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-collection@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.0.tgz#f18af78e46454a2360d103c2251773028b7724ed" @@ -2542,6 +2571,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.0.tgz#6df8d983546cfd1999c8512f3a8ad85a6e7fcee8" integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A== +"@radix-ui/react-context@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" + integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== + "@radix-ui/react-direction@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" @@ -2676,6 +2710,14 @@ "@radix-ui/react-compose-refs" "1.1.0" "@radix-ui/react-use-layout-effect" "1.1.0" +"@radix-ui/react-presence@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.1.tgz#98aba423dba5e0c687a782c0669dcd99de17f9b1" + integrity sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A== + dependencies: + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-primitive@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz#fe05715faa9203a223ccc0be15dc44b9f9822884" @@ -15326,11 +15368,6 @@ typescript@^5.5.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== -typescript@^5.5.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== - ua-parser-js@^1.0.36: version "1.0.36" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.36.tgz#a9ab6b9bd3a8efb90bb0816674b412717b7c428c"