+
+ {{ s__(`mrWidget|The pipeline for this merge request failed.
+Please retry the job or push a new commit to fix the failure`) }}
+
+
+
+
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_ready_to_merge.js b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue
similarity index 62%
rename from app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_ready_to_merge.js
rename to app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue
index 3c781ccddc8..0264625a526 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_ready_to_merge.js
+++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue
@@ -1,3 +1,4 @@
+
-
-
-
-
- Fast-forward merge without a merge commit
-
-
-
-
-
- You can only merge once the items above are resolved
-
-
-
"
+
msgid "PrometheusService|Active"
msgstr "Actif"
@@ -2779,9 +3395,21 @@ msgstr "Déployer et configurer automatiquement Prometheus sur vos clusters pour
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr "Par défaut, Prometheus écoute sur 'http://localhost:9090'. Il n’est pas recommandé de changer l’adresse et le port par défaut car cela pourrait affecter ou entrer en conflit avec d'autres services fonctionnant sur le serveur GitLab."
+msgid "PrometheusService|Common metrics"
+msgstr "Métriques communes"
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr "Les métriques communes sont automatiquement surveillées en fonction d’une bibliothèque de métriques provenant d’exportateurs populaires."
+
+msgid "PrometheusService|Custom metrics"
+msgstr "Métriques personnalisés"
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr "Recherche et configuration des métriques en cours…"
+msgid "PrometheusService|Finding custom metrics..."
+msgstr "Recherche de métriques personnalisées…"
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr "Installer Prometheus sur les clusters"
@@ -2794,20 +3422,14 @@ msgstr "Configuration manuelle"
msgid "PrometheusService|Metrics"
msgstr "Métriques"
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr "Les métriques sont automatiquement configurées et surveillées en fonction d’une bibliothèque de métriques provenant d’exportateurs populaires."
-
msgid "PrometheusService|Missing environment variable"
msgstr "Variable d’environnement manquante"
-msgid "PrometheusService|Monitored"
-msgstr "Surveillé"
-
msgid "PrometheusService|More information"
msgstr "Plus d’informations"
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
-msgstr "Aucune métrique n’est surveillée. Pour démarrer la surveillance, déployez sur un environnement."
+msgid "PrometheusService|New metric"
+msgstr "Nouvelle métrique"
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "URL de base de l’API Prometheus, comme http://prometheus.example.com/"
@@ -2815,6 +3437,9 @@ msgstr "URL de base de l’API Prometheus, comme http://prometheus.example.com/"
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr "Prometheus est géré automatiquement sur vos clusters"
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr "Ces métriques ne seront surveillés qu’après votre premier déploiement dans un environnement"
+
msgid "PrometheusService|Time-series monitoring service"
msgstr "Service de surveillance de séries temporelles"
@@ -2824,8 +3449,17 @@ msgstr "Pour activer la configuration manuelle, désinstallez Prometheus de vos
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr "Pour activer l’installation de Prometheus sur vos clusters, désactivez la configuration manuelle ci-dessous"
-msgid "PrometheusService|View environments"
-msgstr "Afficher les environnements"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr "En attente de votre premier déploiement dans un environnement pour trouver des métriques communes"
+
+msgid "Promote"
+msgstr "Promouvoir"
+
+msgid "Promote to Group Label"
+msgstr "Promouvoir en label de groupe"
+
+msgid "Promote to Group Milestone"
+msgstr "Promouvoir en jalon de groupe"
msgid "Protip:"
msgstr "Astuce :"
@@ -2860,6 +3494,9 @@ msgstr "Lire plus"
msgid "Readme"
msgstr "LisezMoi"
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "Branches"
@@ -2893,6 +3530,9 @@ msgstr "Demandes de fusion liées"
msgid "Related Merged Requests"
msgstr "Demandes fusionnées liées"
+msgid "Related merge requests"
+msgstr "Demandes de fusion liées"
+
msgid "Remind later"
msgstr "Me le rappeler ultérieurement"
@@ -2908,12 +3548,24 @@ msgstr "Supprimer le projet"
msgid "Repair authentication"
msgstr "Réparer l’authentification"
+msgid "Repo by URL"
+msgstr "Dépôt par URL"
+
msgid "Repository"
msgstr "Dépôt"
msgid "Repository has no locks."
msgstr "Le dépôt n’a pas de verrous."
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr "Demander l'accès"
@@ -2929,6 +3581,9 @@ msgstr "Réinitialiser le jeton d’inscription des exécuteurs"
msgid "Resolve discussion"
msgstr "Résoudre la discussion"
+msgid "Response"
+msgstr "Réponse"
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] "Révéler la valeur"
@@ -2940,9 +3595,36 @@ msgstr "Défaire ce commit"
msgid "Revert this merge request"
msgstr "Défaire cette demande de fusion"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr "Examiner"
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr "Feuille de route"
+msgid "Run CI/CD pipelines for external repositories"
+msgstr "Exécuter des pipelines CI / CD pour les dépôts externes"
+
+msgid "Runners"
+msgstr "Exécuteurs"
+
+msgid "Running"
+msgstr "En cours"
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr "Clés SSH"
@@ -2958,6 +3640,9 @@ msgstr "Enregistrer les variables"
msgid "Schedule a new pipeline"
msgstr "Programmer un nouveau pipeline"
+msgid "Scheduled"
+msgstr "Planifié"
+
msgid "Schedules"
msgstr "Programmes"
@@ -2967,6 +3652,9 @@ msgstr "Programmer des pipelines"
msgid "Scoped issue boards"
msgstr "Tableaux de tickets avec portée limitée"
+msgid "Search"
+msgstr "Rechercher"
+
msgid "Search branches and tags"
msgstr "Rechercher dans les branches et les étiquettes"
@@ -3030,15 +3718,33 @@ msgstr "Modèles de service"
msgid "Service URL"
msgstr "URL du service"
+msgid "Session expiration, projects limit and attachment size."
+msgstr "Expiration de la session, limite des projets et taille des pièces jointes."
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "Définissez un mot de passe pour votre compte pour pouvoir tirer ou pousser par %{protocol}."
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr "Définir les valeurs par défaut et limiter les niveaux de visibilité. Configurer les sources d’importation et le protocole d’accès git."
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr "Définir les exigences pour la connexion d’un utilisateur. Activer l’authentification obligatoire à deux facteurs."
+
msgid "Set up CI/CD"
msgstr "Configurer CI/CD"
msgid "Set up Koding"
msgstr "Mettre en place Koding"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "définir un mot de passe"
@@ -3048,6 +3754,9 @@ msgstr "Paramètres"
msgid "Setup a specific Runner automatically"
msgstr "Configurer un Exécuteur spécifique automatiquement"
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr "En réinitialisant les minutes du pipeline pour cet espace de noms, les minutes actuellement utilisées seront remises à zéro."
@@ -3083,6 +3792,18 @@ msgstr "Aucun"
msgid "Sidebar|Weight"
msgstr "Poids"
+msgid "Sign-in restrictions"
+msgstr "Restrictions de connexion"
+
+msgid "Sign-up restrictions"
+msgstr "Restrictions d’inscription"
+
+msgid "Size and domain settings for static websites"
+msgstr "Paramètres de taille et de domaine pour les sites web statiques"
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr "Extraits de code"
@@ -3092,17 +3813,11 @@ msgstr "Une erreur est survenue de notre côté"
msgid "Something went wrong on our end."
msgstr "Une erreur est survenue de notre côté."
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr "Quelque chose s’est mal passé en essayant de changer la confidentialité de ce ticket"
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr "Quelque chose ne s‘est pas bien passé en essayant de changer l’état de verrouillage de cette ${this.issuableDisplayName}"
-
msgid "Something went wrong when toggling the button"
msgstr "Une erreur s’est produite lors du basculement du bouton"
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
-msgstr "Une erreur s’est produite lors de la fermeture du/de la %{issuable}. Veuillez réessayer plus tard"
+msgid "Something went wrong while fetching Dependency Scanning."
+msgstr "Une erreur s’est produite lors de la recherche des dépendances."
msgid "Something went wrong while fetching SAST."
msgstr "Une erreur s’est produite lors de la récupération de la SAST."
@@ -3113,12 +3828,6 @@ msgstr "Une erreur s'est produite lors de la récupération des projets."
msgid "Something went wrong while fetching the registry list."
msgstr "Une erreur s'est produite lors de la récupération de la liste du registre."
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr "Une erreur s’est produite lors de la réouverture du / de la %{issuable}. Veuillez réessayer plus tard"
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr "Quelque chose s’est mal passé. Veuillez réessayer."
@@ -3236,12 +3945,21 @@ msgstr "La source n’est pas disponible"
msgid "Spam Logs"
msgstr "Journaux des messages indésirables"
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr "Spécifiez l’URL suivante lors de la configuration de l'Exécuteur :"
msgid "StarProject|Star"
msgstr "Mettre en favori"
+msgid "Starred Projects"
+msgstr "Projets favoris"
+
+msgid "Starred Projects' Activity"
+msgstr "Activité des projets favoris"
+
msgid "Starred projects"
msgstr "Projets favoris"
@@ -3251,6 +3969,15 @@ msgstr "Créer une %{new_merge_request} avec ces changements"
msgid "Start the Runner!"
msgstr "Démarrer l'Exécuteur !"
+msgid "Started"
+msgstr "Démarré"
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr "État"
+
msgid "Stopped"
msgstr "Arrêté"
@@ -3263,9 +3990,15 @@ msgstr "Sous-groupes"
msgid "Switch branch/tag"
msgstr "Changer de branche / tag"
+msgid "System"
+msgstr "Système"
+
msgid "System Hooks"
msgstr "Crochets système"
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] "Tag (%{tag_count})"
@@ -3346,6 +4079,9 @@ msgstr "protégé"
msgid "Target Branch"
msgstr "Branche cible"
+msgid "Target branch"
+msgstr "Branche cible"
+
msgid "Team"
msgstr "Équipe"
@@ -3361,15 +4097,24 @@ msgstr "Le suivi des tickets est l’endroit où ajouter des éléments à amél
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr "Le suivi des tickets est l’endroit où ajouter des éléments à améliorer ou à résoudre dans un projet. Vous pouvez vous inscrire ou vous connecter pour créer des tickets pour ce projet."
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr "Le certificat X509 à utiliser lorsque le protocole TLS est requis pour communiquer avec le service d’autorisation externe. Si ce champ est vide, le certificat du serveur est utilisé lors de l’accès via HTTPS."
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "L’étape de développement montre le temps entre le premier commit et la création de la demande de fusion. Les données seront automatiquement ajoutées ici une fois que vous aurez créé votre première demande de fusion."
msgid "The collection of events added to the data gathered for that stage."
msgstr "L’ensemble d’évènements ajoutés aux données récupérées pour cette étape."
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr "La connexion expirera après %{timeout}. Pour les dépôts qui prennent plus de temps, utilisez une combinaison cloner / pousser."
+
msgid "The fork relationship has been removed."
msgstr "La relation de fourche a été supprimée."
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr "L’importation expirera après %{timeout}. Pour les dépôts qui prennent plus de temps, utilisez une combinaison clone / push."
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "L'étape des tickets montre le temps nécessaire entre la création d'un ticket et son assignation à un jalon, ou son ajout à une liste d'un tableau de tickets. Commencez par créer des tickets pour voir des données pour cette étape."
@@ -3382,12 +4127,18 @@ msgstr "Le nombre de tentatives que GitLab va effectuer pour accéder au stockag
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr "Nombre d’échecs avant que GitLab n’empêche tout accès au stockage. Ce nombre d’échecs peut être réinitialisé dans l’interface d’administration : %{link_to_health_page} ou en suivant le %{api_documentation_link}."
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr "La phrase secrète est requise pour déchiffrer la clé privée. Ceci est facultatif et la valeur est cryptée à l’arrêt."
+
msgid "The phase of the development lifecycle."
msgstr "Les étapes du cycle de développement."
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr "L’étape de planification montre le temps entre l’étape précédente et l’envoi de votre premier commit. Ce temps sera automatiquement ajouté quand vous pousserez votre premier commit."
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr "La clé privée à utiliser lorsqu’un certificat client est fourni. Cette valeur est cryptée à l’arrêt."
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr "L’étape de mise en production montre le temps nécessaire entre la création d’un ticket et le déploiement du code en production. Les données seront automatiquement ajoutées une fois que vous aurez complété le cycle complet, depuis l’idée jusqu’à la mise en production."
@@ -3403,6 +4154,9 @@ msgstr "Le dépôt pour ce projet n'existe pas."
msgid "The repository for this project is empty"
msgstr "Le dépôt de ce projet est vide"
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr "Le dépôt doit être accessible via http://, https:// ou git://."
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "L’étape d’évaluation montre le temps entre la création de la demande de fusion et la fusion effective de celle-ci. Ces données seront automatiquement ajoutées après que vous ayez fusionné votre première demande de fusion."
@@ -3439,6 +4193,9 @@ msgstr "Il n’y a aucune demande de fusion à afficher"
msgid "There are problems accessing Git storage: "
msgstr "Il y a des difficultés à accéder aux données Git : "
+msgid "There was an error loading results"
+msgstr "Une erreur s’est produite lors du chargement des résultats"
+
msgid "There was an error loading users activity calendar."
msgstr "Une erreur s’est produite lors du chargement du calendrier d’activité des utilisateurs."
@@ -3511,6 +4268,9 @@ msgstr "Ce projet"
msgid "This repository"
msgstr "Ce dépôt"
+msgid "This will delete the custom metric, Are you sure?"
+msgstr "Cela supprimera la métrique personnalisée, êtes-vous sûr•e ?"
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr "Ces emails deviennent automatiquement des tickets (les commentaires étant extrait de la conversation par email) répertoriés ici."
@@ -3523,6 +4283,12 @@ msgstr "Temps avant que la résolution du ticket ne débute"
msgid "Time between merge request creation and merge/close"
msgstr "Temps entre la création d'une demande de fusion et sa fusion/clôture"
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr "Temps en secondes où GitLab attendra une réponse du service externe. Si le service ne répond pas à temps, l’accès sera refusé."
+
msgid "Time tracking"
msgstr "Suivi du temps"
@@ -3680,6 +4446,36 @@ msgstr "Astuce :"
msgid "Title"
msgstr "Titre"
+msgid "To GitLab"
+msgstr "Vers GitLab"
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr "Pour connecter les dépôts GitHub, vous pouvez utiliser un %{personal_access_token_link}. Lorsque vous créez votre jeton d’accès, vous devrez sélectionner le champ repo, afin que nous puissions afficher une liste de vos dépôts publics et privés qui sont disponibles pour se connecter."
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr "Pour connecter les dépôts GitHub, vous devez d’abord autoriser GitLab à accéder à la liste de vos dépôts GitHub :"
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr "Pour connecter un dépôt SVN, consultez %{svn_link}."
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr "Pour importer les dépôts GitHub, vous pouvez utiliser un %{personal_access_token_link}. Lorsque vous créez votre jeton d’accès, vous devrez sélectionner le champ repo, afin que nous puissions afficher une liste de vos dépôts publics et privés qui sont disponibles pour être importés."
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr "Pour importer des dépôts GitHub, vous devez d’abord autoriser GitLab à accéder à la liste de vos dépôts GitHub :"
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr "Pour importer un dépôt SVN, consultez %{svn_link}."
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr "Pour utiliser uniquement les fonctionnalités CI / CD pour un dépôt externe, choisissez CI / CD pour le dépôt externe."
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr "Pour valider vos configurations GitLab CI, allez dans 'CI / CD → Pipelines' dans votre projet, et cliquez sur le bouton 'CI Lint'."
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr "Pour afficher la feuille de route, ajoutez une date de début ou de fin planifiée à l’une de vos épopées dans ce groupe ou ses sous-groupes. Seules les épopées des 3 derniers mois et des 3 prochains mois sont affichées."
@@ -3719,23 +4515,17 @@ msgstr "Déclencher cette action manuelle"
msgid "Turn on Service Desk"
msgstr "Activer le Service Desk"
-msgid "Unable to reset project cache."
-msgstr "Impossible de réinitialiser le cache du projet."
-
msgid "Unknown"
msgstr "Inconnu"
msgid "Unlock"
msgstr "Déverrouiller"
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr "Débloquez le•a %{issuableDisplayName} ? Tout le monde sera en mesure de commenter."
-
msgid "Unlocked"
msgstr "Déverrouillé"
msgid "Unresolve discussion"
-msgstr ""
+msgstr "Marquer la discussion comme non résolue"
msgid "Unstar"
msgstr "Supprimer des favoris"
@@ -3770,6 +4560,12 @@ msgstr "Importer un nouvel avatar"
msgid "UploadLink|click to upload"
msgstr "Cliquez pour envoyer"
+msgid "Upvotes"
+msgstr "Votes positifs"
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr "Utilisez Service Desk pour intéragir avec vos utilisateurs (par exemple pour offrir un support client) par email directement dans GitLab"
@@ -3779,24 +4575,51 @@ msgstr "Utiliser le jeton d’inscription suivant pendant l’installation :"
msgid "Use your global notification setting"
msgstr "Utiliser vos paramètres de notification globaux"
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr "Les variables sont appliquées aux environnements via l’exécuteur. Elles peuvent être protégées en les exposant uniquement à des branches ou des tags protégées. Vous pouvez utiliser des variables pour les mots de passe, les clés secrètes ou tout ce que vous voulez."
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr "Afficher et modifier les lignes"
+
msgid "View epics list"
msgstr "Afficher la liste des épopées"
msgid "View file @ "
msgstr "Voir le fichier @ "
+msgid "View group labels"
+msgstr "Afficher les labels de groupe"
+
msgid "View labels"
msgstr "Afficher les labels"
msgid "View open merge request"
msgstr "Afficher la demande de fusion"
+msgid "View project labels"
+msgstr "Afficher les labels de projet"
+
msgid "View replaced file @ "
msgstr "Voir le fichier remplacé @ "
+msgid "Visibility and access controls"
+msgstr "Contrôles de visibilité et d’accès"
+
msgid "VisibilityLevel|Internal"
msgstr "Interne"
@@ -3824,12 +4647,18 @@ msgstr "Nous voulons être sûrs que c'est bien vous, merci de confirmer que vou
msgid "Web IDE"
msgstr "Web IDE"
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr "Les webhooks vous permettent d’appeler une URL si, par exemple, du nouveau code est poussé ou un nouveau ticket est créé. Vous pouvez configurer les webhooks pour écouter les événements spécifiques comme des poussées de code, des tickets ou des demandes de fusion. Les webhooks de groupes s’appliqueront à tous les projets dans un groupe, ce qui vous permet de normaliser la fonctionnalité du webhook dans votre groupe entier."
msgid "Weight"
msgstr "Poids"
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr "Lorsque vous laissez l’URL vide, les étiquettes de classification peuvent toujours être spécifiées sans désactiver les fonctionnalités inter-projets ou effectuer des vérifications d’autorisation externes."
+
msgid "Wiki"
msgstr "Wiki"
@@ -3950,14 +4779,20 @@ msgstr "Écrire un message de commit…"
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "Vous êtes sur le point de supprimer %{group_name}. Les groupes supprimés NE PEUVENT PAS être restaurés ! Êtes vous ABSOLUMENT sûr·e ?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "Vous êtes sur le point de supprimer %{project_name_with_namespace}. Les projets supprimés NE PEUVENT PAS être restaurés ! Êtes vous ABSOLUMENT sûr·e ?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr "Vous êtes sur le point de supprimer %{project_full_name}. Les projets supprimés NE PEUVENT PAS être restaurés ! Êtes-vous ABSOLUMENT sûr•e ?"
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "Vous allez supprimer la relation de fourche avec le projet source %{forked_from_project}. Êtes-vous ABSOLUMENT sûr·e ?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "Vous allez transférer %{project_name_with_namespace} à un nouveau propriétaire. Êtes vous ABSOLUMENT sûr·e ?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr "Vous allez transférer %{project_full_name} à un•e nouveau•elle propriétaire. Êtes-vous VRAIMENT sûr•e ?"
+
+msgid "You are on a read-only GitLab instance."
+msgstr "Vous êtes sur une instance GitLab en lecture seule."
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr "Vous êtes sur un nœud Geo secondaire (en lecture seule). Si vous voulez apporter des modifications, vous devez visiter le %{primary_node}."
msgid "You can also create a project from the command line."
msgstr "Vous pouvez également créer un projet en ligne de commande."
@@ -4031,9 +4866,27 @@ msgstr "Vous ne pourrez pas récupérer ou pousser de code par SSH tant que vous
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "Vous devrez utiliser différents noms de branches pour obtenir une comparaison valide."
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr "Vous recevez ce courriel en raison de votre compte sur %{host}. %{manage_notifications_link} · %{help_link}"
+
+msgid "Your Groups"
+msgstr "Vos groupes"
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr "Vos informations de cluster Kubernetes sur cette page sont toujours modifiables, mais il est conseillé de désactiver et reconfigurer"
+msgid "Your Projects (default)"
+msgstr "Vos projets (défaut)"
+
+msgid "Your Projects' Activity"
+msgstr "Activité de vos projets favoris"
+
+msgid "Your Todos"
+msgstr "Vos tâches à faire"
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr "Vos modifications peuvent être validées sur %{branch_name} car une demande de fusion est ouverte."
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr "Vos modifications ont été validées. Commit %{commitId} %{commitStats}"
@@ -4049,6 +4902,14 @@ msgstr "Votre nom"
msgid "Your projects"
msgstr "Vos projets"
+msgid "among other things"
+msgstr "entre autres choses"
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] "et %d vulnérabilité corrigée"
+msgstr[1] "et %d vulnérabilités corrigées"
+
msgid "assign yourself"
msgstr "assignez vous"
@@ -4058,12 +4919,30 @@ msgstr "nom de la branche"
msgid "by"
msgstr "par"
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr "%{type} n’a détecté aucune nouvelle vulnérabilité de sécurité"
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr "%{type} n’a détecté aucune vulnérabilité de sécurité"
+
msgid "ciReport|Code quality"
msgstr "Qualité du code"
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr "DAST n’a détecté aucune alerte en analysant l’application de revue"
+msgid "ciReport|Dependency scanning"
+msgstr "Analyse de dépendance"
+
+msgid "ciReport|Dependency scanning detected"
+msgstr "Analyse de dépendance détectée"
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr "L’analyse des dépendances n’a détecté aucune nouvelle vulnérabilité de sécurité"
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr "L’analyse des dépendances n’a détecté aucune vulnérabilité de sécurité"
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr "Impossible de charger le rapport %{reportName}"
@@ -4091,9 +4970,6 @@ msgstr "Indicateurs de performance"
msgid "ciReport|SAST"
msgstr "SAST"
-msgid "ciReport|SAST degraded on"
-msgstr "SAST dégradée sur"
-
msgid "ciReport|SAST detected"
msgstr "SAST détectée"
@@ -4106,41 +4982,69 @@ msgstr "SAST n’a détecté aucune vulnérabilité de sécurité"
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr "SAST:conteneur aucune vulnérabilité n’a été trouvée"
+msgid "ciReport|Security scanning"
+msgstr "Analyse de sécurité"
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr "L’analyse de sécurité n’a pas réussi à charger de résultats"
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr "Afficher le rapport complet sur les vulnérabilités du code"
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr "Les vulnérabilités non approuvées (en rouge) peuvent être marquées comme approuvées. %{helpLink}"
-msgid "ciReport|no security vulnerabilities"
-msgstr "aucune vulnérabilité de sécurité"
+msgid "ciReport|no vulnerabilities"
+msgstr "aucune vulnérabilité"
msgid "command line instructions"
msgstr "instructions en ligne de commande"
-msgid "commit"
-msgstr "validation"
+msgid "connecting"
+msgstr "connexion en cours"
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr "Vous allez désactiver la confidentialité. Cela signifie que tout le monde sera en mesure de voir et de laisser un commentaire sur ce ticket."
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
-msgstr "Vous allez activer la confidentialité. Cela signifie que seuls les membres de l’équipe avec au moins un accès Reporter sont capables de voir et de laisser des commentaires sur le ticket."
+msgid "could not read private key, is the passphrase correct?"
+msgstr "impossible de lire la clé privée, la phrase secrète est-elle correcte ?"
msgid "day"
msgid_plural "days"
msgstr[0] "jour"
msgstr[1] "jours"
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] "a détecté %d vulnérabilité corrigée"
+msgstr[1] "a détecté %d vulnérabilités corrigées"
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] "a détecté %d nouvelle vulnérabilité"
+msgstr[1] "a détecté %d nouvelle vulnérabilité"
+
+msgid "detected no vulnerabilities"
+msgstr "n’a détecté aucune vulnérabilité"
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr "%{slash_command} mettra à jour la durée estimée avec la dernière commande."
+msgid "here"
+msgstr "ici"
+
+msgid "importing"
+msgstr "importation en cours"
+
+msgid "in progress"
+msgstr "en cours"
+
msgid "is invalid because there is downstream lock"
msgstr "est invalide car il y a un verrou en aval"
msgid "is invalid because there is upstream lock"
msgstr "est invalide car il y a un verrou en amont"
+msgid "is not a valid X509 certificate."
+msgstr "n’est pas un certificat X509 valide."
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "verrouillé par %{path_lock_user_name} %{created_at}"
@@ -4152,9 +5056,21 @@ msgstr[1] "demandes de fusion"
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "Veuillez la restaurer ou utiliser une autre branche %{missingBranchName}"
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr "%{metricsLinkStart}L’usage mémoire%{metricsLinkEnd} %{emphasisStart}a diminué%{emphasisEnd} de %{memoryFrom}MO à %{memoryTo}MO"
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr "%{metricsLinkStart}L’usage mémoire%{metricsLinkEnd} %{emphasisStart}a augmenté%{emphasisEnd} de %{memoryFrom}MO à %{memoryTo}MO"
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr "%{metricsLinkStart}L’usage mémoire%{metricsLinkEnd} %{emphasisStart}est resté stable%{emphasisEnd} à %{memoryFrom}MO"
+
msgid "mrWidget|Add approval"
msgstr "Ajouter une approbation"
+msgid "mrWidget|Allows edits from maintainers"
+msgstr "Autoriser les modifications par les mainteneurs"
+
msgid "mrWidget|An error occured while removing your approval."
msgstr "Une erreur est survenue lors de la suppression de votre approbation."
@@ -4167,6 +5083,9 @@ msgstr "Une erreur est survenue pendant l’envoi de votre approbation."
msgid "mrWidget|Approve"
msgstr "Approuver"
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr "Approuvée par"
@@ -4194,18 +5113,27 @@ msgstr "Fermée par"
msgid "mrWidget|Closes"
msgstr "Résout"
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr "Les statistiques de déploiement ne sont pas disponibles pour le moment"
+
msgid "mrWidget|Did not close"
msgstr "N’a pas résolu"
msgid "mrWidget|Email patches"
msgstr "Patchs par courriel"
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr "Impossible de charger les statistiques de déploiement"
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr "Si la branche %{branch} existe dans votre dépôt local, vous pouvez fusionner cette demande de fusion manuellement à l’aide de"
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr "Si la branche %{missingBranchName} existe dans votre dépôt local, vous pouvez fusionner cette demande de fusion manuellement en ligne de commande"
+msgid "mrWidget|Loading deployment statistics"
+msgstr "mrWidget | Chargement des statistiques de déploiement"
+
msgid "mrWidget|Mentions"
msgstr "Mentionne"
@@ -4243,7 +5171,7 @@ msgid "mrWidget|Remove your approval"
msgstr "Supprimer votre approbation"
msgid "mrWidget|Request to merge"
-msgstr "Demander la fusion"
+msgstr "Demande de fusion de"
msgid "mrWidget|Resolve conflicts"
msgstr "Résoudre les conflits"
@@ -4290,6 +5218,9 @@ msgstr "Cette demande de fusion est en cours de fusion"
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "Ce projet est archivé, l’accès en écriture a été désactivé"
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "Vous pouvez fusionner cette demande de fusion manuellement à l’aide de la"
@@ -4328,6 +5259,9 @@ msgstr "mot de passe"
msgid "personal access token"
msgstr "jeton d’accès personnel"
+msgid "private key does not match certificate."
+msgstr "clé privée ne correspond pas au certificat."
+
msgid "remove due date"
msgstr "supprimer la date d’échéance"
@@ -4337,6 +5271,9 @@ msgstr "source"
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr "%{slash_command} mettra à jour la somme du temps passé."
+msgid "this document"
+msgstr "ce document"
+
msgid "to help your contributors communicate effectively!"
msgstr "pour aider vos contributeurs à communiquer efficacement !"
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 68d0c0c8854..d7eb123b48b 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-27 14:40+0300\n"
-"PO-Revision-Date: 2018-03-27 14:40+0300\n"
+"POT-Creation-Date: 2018-04-04 18:02+0200\n"
+"PO-Revision-Date: 2018-04-04 18:02+0200\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"Language: \n"
@@ -133,6 +133,9 @@ msgstr ""
msgid "Abuse Reports"
msgstr ""
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr ""
@@ -142,6 +145,9 @@ msgstr ""
msgid "Account"
msgstr ""
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr ""
@@ -235,6 +241,9 @@ msgstr ""
msgid "Allow edits from maintainers."
msgstr ""
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
@@ -343,6 +352,12 @@ msgstr ""
msgid "Assign to"
msgstr ""
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
msgid "Assigned to :name"
msgstr ""
@@ -370,6 +385,9 @@ msgstr ""
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -412,6 +430,9 @@ msgstr ""
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -1102,6 +1123,9 @@ msgstr ""
msgid "Compare changes with the last commit"
msgstr ""
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1123,6 +1147,21 @@ msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
msgid "Connect"
msgstr ""
@@ -1174,6 +1213,9 @@ msgstr ""
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr ""
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
msgid "Contribution"
msgstr ""
@@ -1419,6 +1461,21 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1467,6 +1524,9 @@ msgstr ""
msgid "Environments|You don't have any environments right now."
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1637,6 +1697,9 @@ msgstr ""
msgid "GitHub import"
msgstr ""
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr ""
@@ -1742,6 +1805,12 @@ msgstr ""
msgid "Help"
msgstr ""
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1879,10 +1948,10 @@ msgstr ""
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
-msgid "Labels|Promote Label"
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
msgstr ""
-msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgid "Labels|Promote Label"
msgstr ""
msgid "Last %d day"
@@ -1950,9 +2019,6 @@ msgstr ""
msgid "Lock %{issuableDisplayName}"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr ""
@@ -2010,6 +2076,12 @@ msgstr ""
msgid "Messages"
msgstr ""
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2264,12 +2336,18 @@ msgstr ""
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Owner"
msgstr ""
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr ""
@@ -2282,6 +2360,9 @@ msgstr ""
msgid "Pagination|« First"
msgstr ""
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -2492,6 +2573,9 @@ msgstr ""
msgid "Profiles|your account"
msgstr ""
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2723,6 +2807,12 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr ""
@@ -2752,6 +2842,9 @@ msgstr ""
msgid "Reviewing"
msgstr ""
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Runners"
msgstr ""
@@ -2839,9 +2932,21 @@ msgstr ""
msgid "Service Templates"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr ""
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
@@ -2871,6 +2976,15 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
msgid "Snippets"
msgstr ""
@@ -2880,12 +2994,6 @@ msgstr ""
msgid "Something went wrong on our end."
msgstr ""
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr ""
-
msgid "Something went wrong when toggling the button"
msgstr ""
@@ -3003,12 +3111,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr ""
msgid "StarProject|Star"
msgstr ""
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3456,6 +3573,9 @@ msgstr ""
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "Todo"
msgstr ""
@@ -3486,9 +3606,6 @@ msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3522,6 +3639,9 @@ msgstr ""
msgid "Use your global notification setting"
msgstr ""
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -3546,6 +3666,9 @@ msgstr ""
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr ""
@@ -3762,9 +3885,21 @@ msgstr ""
msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
msgstr ""
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
msgid "Your changes can be committed to %{branch_name} because a merge request is open."
msgstr ""
@@ -3795,12 +3930,6 @@ msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
-msgstr ""
-
msgid "connecting"
msgstr ""
@@ -3823,6 +3952,15 @@ msgstr[1] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Allows edits from maintainers"
msgstr ""
@@ -3850,18 +3988,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -3943,6 +4090,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
diff --git a/locale/id_ID/gitlab.po b/locale/id_ID/gitlab.po
index 183cb996b0a..adb9746e854 100644
--- a/locale/id_ID/gitlab.po
+++ b/locale/id_ID/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:23-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:39-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Indonesian\n"
"Language: id_ID\n"
@@ -27,6 +27,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] ""
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -39,6 +43,10 @@ msgid "%d merge request"
msgid_plural "%d merge requests"
msgstr[0] ""
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] ""
@@ -53,6 +61,9 @@ msgid "%{count} participant"
msgid_plural "%{count} participants"
msgstr[0] ""
+msgid "%{loadingIcon} Started"
+msgstr ""
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
@@ -94,15 +105,30 @@ msgstr ""
msgid "2FA enabled"
msgstr ""
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr ""
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr ""
msgid "Abuse Reports"
msgstr ""
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr ""
@@ -112,6 +138,9 @@ msgstr ""
msgid "Account"
msgstr ""
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr ""
@@ -208,9 +237,33 @@ msgstr ""
msgid "All changes are committed"
msgstr ""
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
msgid "An error occurred previewing the blob"
msgstr ""
@@ -289,6 +342,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "Any Label"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -322,6 +378,9 @@ msgstr ""
msgid "Artifacts"
msgstr ""
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr ""
@@ -334,6 +393,15 @@ msgstr ""
msgid "Assign to"
msgstr ""
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr ""
@@ -358,6 +426,9 @@ msgstr ""
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -400,6 +471,12 @@ msgstr ""
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -482,6 +559,15 @@ msgstr ""
msgid "Branches"
msgstr ""
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr ""
@@ -527,12 +613,39 @@ msgstr ""
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr ""
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
msgstr ""
msgid "Branches|Sort by"
msgstr ""
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -578,30 +691,45 @@ msgstr ""
msgid "Browse files"
msgstr ""
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr ""
msgid "CI / CD"
msgstr ""
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
msgstr ""
+msgid "CI/CD for external repo"
+msgstr ""
+
msgid "CICD|Jobs"
msgstr ""
msgid "Cancel"
msgstr ""
-msgid "Cancel edit"
+msgid "Cannot be merged automatically"
msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr ""
@@ -656,6 +784,12 @@ msgstr ""
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -758,6 +892,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr ""
@@ -857,6 +1000,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr ""
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -866,6 +1012,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr ""
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr ""
@@ -884,6 +1033,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -917,6 +1069,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -977,6 +1132,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1004,6 +1162,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1126,6 +1287,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1141,9 +1308,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr ""
@@ -1189,6 +1392,12 @@ msgstr ""
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr ""
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr ""
@@ -1252,7 +1461,7 @@ msgstr ""
msgid "Create directory"
msgstr ""
-msgid "Create empty bare repository"
+msgid "Create empty repository"
msgstr ""
msgid "Create epic"
@@ -1261,6 +1470,9 @@ msgstr ""
msgid "Create file"
msgstr ""
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1285,6 +1497,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr ""
@@ -1318,6 +1533,9 @@ msgstr ""
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr ""
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr ""
@@ -1400,9 +1618,15 @@ msgstr ""
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr ""
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr ""
@@ -1430,9 +1654,15 @@ msgstr ""
msgid "DownloadSource|Download"
msgstr ""
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr ""
@@ -1442,6 +1672,18 @@ msgstr ""
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr ""
@@ -1451,6 +1693,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1511,6 +1780,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1586,9 +1858,15 @@ msgstr ""
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1598,6 +1876,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1631,6 +1912,9 @@ msgstr ""
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr ""
@@ -1640,12 +1924,21 @@ msgstr ""
msgid "Find file"
msgstr ""
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr ""
msgid "FirstPushedBy|pushed by"
msgstr ""
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] ""
@@ -1656,9 +1949,15 @@ msgstr ""
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr ""
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr ""
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr ""
@@ -1677,12 +1976,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1728,21 +2033,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1755,9 +2087,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1788,6 +2132,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1797,12 +2144,30 @@ msgstr ""
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr ""
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
@@ -1869,9 +2234,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr ""
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr ""
@@ -1902,6 +2264,9 @@ msgstr ""
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr ""
@@ -1920,6 +2285,15 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1930,12 +2304,39 @@ msgstr ""
msgid "Housekeeping successfully started"
msgstr ""
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr ""
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -1958,6 +2359,9 @@ msgstr[0] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2012,6 +2416,9 @@ msgstr ""
msgid "June"
msgstr ""
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2042,12 +2449,30 @@ msgstr ""
msgid "LFSStatus|Enabled"
msgstr ""
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr ""
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] ""
@@ -2106,6 +2531,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2118,9 +2546,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr ""
@@ -2136,9 +2561,21 @@ msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr ""
@@ -2160,6 +2597,9 @@ msgstr ""
msgid "Members"
msgstr ""
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr ""
@@ -2172,15 +2612,87 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr ""
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2196,6 +2708,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr ""
@@ -2208,6 +2729,9 @@ msgstr ""
msgid "Monitoring"
msgstr ""
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2281,6 +2805,9 @@ msgstr ""
msgid "New tag"
msgstr ""
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2299,6 +2826,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr ""
@@ -2314,6 +2844,12 @@ msgstr ""
msgid "Not available"
msgstr ""
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2323,6 +2859,18 @@ msgstr ""
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr ""
@@ -2407,6 +2955,12 @@ msgstr ""
msgid "OfSearchInADropdown|Filter"
msgstr ""
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr ""
@@ -2428,12 +2982,18 @@ msgstr ""
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Owner"
msgstr ""
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr ""
@@ -2446,9 +3006,21 @@ msgstr ""
msgid "Pagination|« First"
msgstr ""
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr ""
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr ""
@@ -2530,9 +3102,36 @@ msgstr ""
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2563,6 +3162,9 @@ msgstr ""
msgid "Pipeline|with stages"
msgstr ""
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2572,6 +3174,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -2626,6 +3234,9 @@ msgstr ""
msgid "Profiles|your account"
msgstr ""
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2650,9 +3261,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr ""
@@ -2749,6 +3357,12 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2761,9 +3375,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr ""
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr ""
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2776,19 +3402,13 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr ""
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr ""
-
msgid "PrometheusService|Missing environment variable"
msgstr ""
-msgid "PrometheusService|Monitored"
-msgstr ""
-
msgid "PrometheusService|More information"
msgstr ""
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
+msgid "PrometheusService|New metric"
msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
@@ -2797,6 +3417,9 @@ msgstr ""
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2806,7 +3429,16 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
msgstr ""
msgid "Protip:"
@@ -2842,6 +3474,9 @@ msgstr ""
msgid "Readme"
msgstr ""
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr ""
@@ -2875,6 +3510,9 @@ msgstr ""
msgid "Related Merged Requests"
msgstr ""
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -2890,12 +3528,24 @@ msgstr ""
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr ""
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr ""
@@ -2911,6 +3561,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] ""
@@ -2921,9 +3574,36 @@ msgstr ""
msgid "Revert this merge request"
msgstr ""
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr ""
@@ -2939,6 +3619,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr ""
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -2948,6 +3631,9 @@ msgstr ""
msgid "Scoped issue boards"
msgstr ""
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr ""
@@ -3011,15 +3697,33 @@ msgstr ""
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr ""
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr ""
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -3029,6 +3733,9 @@ msgstr ""
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3063,6 +3770,18 @@ msgstr ""
msgid "Sidebar|Weight"
msgstr ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr ""
@@ -3072,16 +3791,10 @@ msgstr ""
msgid "Something went wrong on our end."
msgstr ""
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr ""
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3093,12 +3806,6 @@ msgstr ""
msgid "Something went wrong while fetching the registry list."
msgstr ""
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3216,12 +3923,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr ""
msgid "StarProject|Star"
msgstr ""
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3231,6 +3947,15 @@ msgstr ""
msgid "Start the Runner!"
msgstr ""
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -3243,9 +3968,15 @@ msgstr ""
msgid "Switch branch/tag"
msgstr ""
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr ""
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3325,6 +4056,9 @@ msgstr ""
msgid "Target Branch"
msgstr ""
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr ""
@@ -3340,15 +4074,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr ""
msgid "The collection of events added to the data gathered for that stage."
msgstr ""
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr ""
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr ""
@@ -3361,12 +4104,18 @@ msgstr ""
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr ""
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr ""
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr ""
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr ""
@@ -3382,6 +4131,9 @@ msgstr ""
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr ""
@@ -3418,6 +4170,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3490,6 +4245,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr ""
@@ -3502,6 +4260,12 @@ msgstr ""
msgid "Time between merge request creation and merge/close"
msgstr ""
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3657,6 +4421,36 @@ msgstr ""
msgid "Title"
msgstr ""
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
@@ -3696,18 +4490,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr ""
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3747,6 +4535,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr ""
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr ""
@@ -3756,24 +4550,51 @@ msgstr ""
msgid "Use your global notification setting"
msgstr ""
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr ""
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr ""
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr ""
@@ -3801,12 +4622,18 @@ msgstr ""
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr ""
msgid "Weight"
msgstr ""
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr ""
@@ -3927,13 +4754,19 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr ""
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
msgstr ""
msgid "You can also create a project from the command line."
@@ -4008,9 +4841,27 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4026,6 +4877,13 @@ msgstr ""
msgid "Your projects"
msgstr ""
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+
msgid "assign yourself"
msgstr ""
@@ -4035,12 +4893,30 @@ msgstr ""
msgid "by"
msgstr ""
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4068,9 +4944,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4083,40 +4956,66 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
msgid_plural "days"
msgstr[0] ""
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4127,9 +5026,21 @@ msgstr[0] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4142,6 +5053,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4169,18 +5083,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4265,6 +5188,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4302,6 +5228,9 @@ msgstr ""
msgid "personal access token"
msgstr ""
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4311,6 +5240,9 @@ msgstr ""
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
diff --git a/locale/it/gitlab.po b/locale/it/gitlab.po
index 0cb814ac59c..41d6a76be66 100644
--- a/locale/it/gitlab.po
+++ b/locale/it/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:21-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:37-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Italian\n"
"Language: it_IT\n"
@@ -29,6 +29,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -44,6 +49,11 @@ msgid_plural "%d merge requests"
msgstr[0] ""
msgstr[1] ""
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] "%s commit aggiuntivo è stato omesso per evitare degradi di prestazioni negli issues."
@@ -60,6 +70,9 @@ msgid_plural "%{count} participants"
msgstr[0] "%{count} partecipante"
msgstr[1] "%{count} partecipanti"
+msgid "%{loadingIcon} Started"
+msgstr ""
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
@@ -103,15 +116,30 @@ msgstr "Primo contributo!"
msgid "2FA enabled"
msgstr "2FA abilitata"
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Un insieme di grafici riguardo la Continuous Integration"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr "Riguardo il rilascio automatico"
msgid "Abuse Reports"
msgstr "Segnalazioni di abuso"
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr "Token di accesso"
@@ -121,6 +149,9 @@ msgstr "L'accesso agli storages è stato temporaneamente disabilitato per consen
msgid "Account"
msgstr "Account"
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "Attivo"
@@ -217,9 +248,33 @@ msgstr "Tutto"
msgid "All changes are committed"
msgstr ""
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
msgid "An error occurred previewing the blob"
msgstr ""
@@ -298,6 +353,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr "Si è verificato un errore. Riprova."
+msgid "Any Label"
+msgstr ""
+
msgid "Appearance"
msgstr "Aspetto"
@@ -331,6 +389,9 @@ msgstr "Sei sicuro?"
msgid "Artifacts"
msgstr "Artefatti"
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr ""
@@ -343,6 +404,15 @@ msgstr ""
msgid "Assign to"
msgstr ""
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr ""
@@ -367,6 +437,9 @@ msgstr ""
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -409,6 +482,12 @@ msgstr ""
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -492,6 +571,15 @@ msgstr "Cambia branch"
msgid "Branches"
msgstr "Branch"
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr "Impossibile trovare l'HEAD commit per questa branch"
@@ -537,12 +625,39 @@ msgstr "Una volta confermato e premuto %{delete_protected_branch} non sarà poss
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr "Solo gli Owner e i Master possono eliminare una branch protetta"
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
-msgstr "Le branch protette possono esser gestite in %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
+msgstr ""
msgid "Branches|Sort by"
msgstr "Ordina per"
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -588,30 +703,45 @@ msgstr "Esplora Files"
msgid "Browse files"
msgstr "Guarda i files"
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr "per"
msgid "CI / CD"
msgstr "CI / CD"
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
msgstr ""
+msgid "CI/CD for external repo"
+msgstr ""
+
msgid "CICD|Jobs"
msgstr "Jobs"
msgid "Cancel"
msgstr "Cancella"
-msgid "Cancel edit"
-msgstr "Annulla modifica"
+msgid "Cannot be merged automatically"
+msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Preleva nella branch"
@@ -666,6 +796,12 @@ msgstr ""
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -768,6 +904,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr "Clona repository"
@@ -867,6 +1012,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr "Helm Tiller"
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr "Ingresso"
@@ -876,6 +1024,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr "Installa"
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr "Installato"
@@ -894,6 +1045,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -927,6 +1081,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Tipo di macchina"
@@ -987,6 +1144,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1014,6 +1174,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1138,6 +1301,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1153,9 +1322,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr ""
@@ -1201,6 +1406,12 @@ msgstr "Utilizza nomi d'immagine differenti"
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr "Con il Docker Container Registry integrato in Gitlab, ogni progetto può avere il suo spazio d'archiviazione sulle immagini Docker."
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr "Guida per contribuire"
@@ -1264,8 +1475,8 @@ msgstr ""
msgid "Create directory"
msgstr "Crea cartella"
-msgid "Create empty bare repository"
-msgstr "Crea una repository vuota"
+msgid "Create empty repository"
+msgstr ""
msgid "Create epic"
msgstr ""
@@ -1273,6 +1484,9 @@ msgstr ""
msgid "Create file"
msgstr "Crea file"
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1297,6 +1511,9 @@ msgstr ""
msgid "Create new..."
msgstr "Crea nuovo..."
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr "Fork"
@@ -1330,6 +1547,9 @@ msgstr "Eventi-Notifica personalizzati"
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "I livelli di notifica personalizzati sono uguali a quelli di partecipazione. Con i livelli di notifica personalizzati riceverai anche notifiche per gli eventi da te scelti %{notification_link}."
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr "Statistiche Cicliche"
@@ -1413,9 +1633,15 @@ msgstr "Chiudi l'introduzione alle Analisi Cicliche"
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr "Non mostrare più"
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr "Scarica"
@@ -1443,9 +1669,15 @@ msgstr "Differenze"
msgid "DownloadSource|Download"
msgstr "Scarica"
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr "Modifica"
@@ -1455,6 +1687,18 @@ msgstr "Cambia programmazione della pipeline %{id}"
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr "E-mail"
@@ -1464,6 +1708,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr "Errore durante il fetch degli ambienti."
@@ -1524,6 +1795,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1599,9 +1873,15 @@ msgstr "Esplora gruppi pubblici"
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1611,6 +1891,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1644,6 +1927,9 @@ msgstr "Files"
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr "Filtra per messaggio di commit"
@@ -1653,12 +1939,21 @@ msgstr "Trova in percorso"
msgid "Find file"
msgstr "Trova file"
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr "Primo"
msgid "FirstPushedBy|pushed by"
msgstr "Push di"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] "Fork"
@@ -1670,9 +1965,15 @@ msgstr "Fork da"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr "Fork da %{project_name} (eliminato)"
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr "Formato"
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr "Dalla creazione di un issue fino al rilascio in produzione"
@@ -1691,12 +1992,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1742,21 +2049,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1769,9 +2103,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1802,6 +2148,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1811,12 +2160,30 @@ msgstr "Le informazioni sullo stato dell'archiviazione Git è stata ripristinata
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr "Sezione Gitlab Runner"
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr "Vai il tuo fork"
@@ -1883,9 +2250,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr ""
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr ""
@@ -1916,6 +2280,9 @@ msgstr ""
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr "Verifica stato"
@@ -1934,6 +2301,15 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1945,12 +2321,39 @@ msgstr "Cronologia"
msgid "Housekeeping successfully started"
msgstr "Housekeeping iniziato con successo"
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr "Importa repository"
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -1974,6 +2377,9 @@ msgstr[1] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2028,6 +2434,9 @@ msgstr "Giu"
msgid "June"
msgstr "Giugno"
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2058,12 +2467,30 @@ msgstr "Disabilitato"
msgid "LFSStatus|Enabled"
msgstr "Abilitato"
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr ""
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "L'ultimo %d giorno"
@@ -2123,6 +2550,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2135,9 +2565,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr "Bloccato"
@@ -2153,9 +2580,21 @@ msgstr "Login"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr "Mar"
@@ -2177,6 +2616,9 @@ msgstr "Mediano"
msgid "Members"
msgstr "Membri"
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr "Richieste di merge"
@@ -2189,15 +2631,87 @@ msgstr "Richiesta di merge"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr "Messaggi"
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2213,6 +2727,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "aggiungi una chiave SSH"
@@ -2225,6 +2748,9 @@ msgstr ""
msgid "Monitoring"
msgstr "Monitoraggio"
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2299,6 +2825,9 @@ msgstr "Nuovo sottogruppo"
msgid "New tag"
msgstr "Nuovo tag"
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2317,6 +2846,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr "Nessuna Repository"
@@ -2332,6 +2864,12 @@ msgstr ""
msgid "Not available"
msgstr "Non disponibile"
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2341,6 +2879,18 @@ msgstr "Dati insufficienti "
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr "Notifica eventi"
@@ -2425,6 +2975,12 @@ msgstr "Ottobre"
msgid "OfSearchInADropdown|Filter"
msgstr "Filtra"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr "Solo i membri del progetto possono commentare."
@@ -2446,12 +3002,18 @@ msgstr "Opzioni"
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr "Panoramica"
msgid "Owner"
msgstr "Proprietario"
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr "Ultima »"
@@ -2464,9 +3026,21 @@ msgstr "Precedente"
msgid "Pagination|« First"
msgstr "« Prima"
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr "Password"
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr "Pipeline"
@@ -2548,9 +3122,36 @@ msgstr "Pipeline per l'ultimo anno"
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2581,6 +3182,9 @@ msgstr "con stadio"
msgid "Pipeline|with stages"
msgstr "con più stadi"
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2590,6 +3194,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr "Preferenze"
@@ -2644,6 +3254,9 @@ msgstr "Il tuo account è attualmente proprietario in questi gruppi:"
msgid "Profiles|your account"
msgstr "il tuo account"
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2668,9 +3281,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr "Dettagli del progetto"
@@ -2767,6 +3377,12 @@ msgstr "Siamo spiacenti, non ci sono progetti che corrispondono alla tua ricerca
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Questa feature richiede il supporto del localStorage del browser"
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2779,9 +3395,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr "Di default, Prometheus è in ascolto su ‘http://localhost:9090‘. Non è consigliabile cambiare l'indirizzo e la porta di default in quanto ciò potrebbe influenzare o causare conflitto con altri servizi in esecuzione sul server GitLab."
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr "Ricerco e configuro le metriche..."
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2794,20 +3422,14 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr "Metriche"
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr "Le metriche sono configurate automaticamente e monitorate sulla base di una libreria di metriche di esportatori popolari."
-
msgid "PrometheusService|Missing environment variable"
msgstr "Variabile d'ambiente mancante"
-msgid "PrometheusService|Monitored"
-msgstr "Monitorato"
-
msgid "PrometheusService|More information"
msgstr "Ulteriori informazioni"
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
-msgstr "Nessuna metrica è stata monitorata. Per iniziare a monitorare, rilascia su un ambiente."
+msgid "PrometheusService|New metric"
+msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -2815,6 +3437,9 @@ msgstr ""
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2824,7 +3449,16 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
msgstr ""
msgid "Protip:"
@@ -2860,6 +3494,9 @@ msgstr "Vedi altro"
msgid "Readme"
msgstr "Leggimi"
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "Branches"
@@ -2893,6 +3530,9 @@ msgstr "Richieste di Merge Correlate"
msgid "Related Merged Requests"
msgstr "Richieste di Merge Completate Correlate"
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr "Ricordamelo più tardi"
@@ -2908,12 +3548,24 @@ msgstr "Rimuovi progetto"
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr ""
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr "Richiedi accesso"
@@ -2929,6 +3581,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] ""
@@ -2940,9 +3595,36 @@ msgstr "Ripristina questo commit"
msgid "Revert this merge request"
msgstr "Ripristina questa richiesta di merge"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr "Chiavi SSH"
@@ -2958,6 +3640,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr "Pianifica una nuova Pipeline"
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -2967,6 +3652,9 @@ msgstr "Pianificazione pipelines"
msgid "Scoped issue boards"
msgstr ""
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr "Ricerca branches e tags"
@@ -3030,15 +3718,33 @@ msgstr ""
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "Establezca una contraseña en su cuenta para actualizar o enviar a través de %{protocol}."
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr "Configura Koding"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "imposta una password"
@@ -3048,6 +3754,9 @@ msgstr "Impostazioni"
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3083,6 +3792,18 @@ msgstr ""
msgid "Sidebar|Weight"
msgstr ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr "Snippet"
@@ -3090,18 +3811,12 @@ msgid "Something went wrong on our end"
msgstr ""
msgid "Something went wrong on our end."
-msgstr "Si è verificato un problema con il nostro server."
-
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
msgstr ""
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3113,12 +3828,6 @@ msgstr "Qualcosa è andato storto durante il fetch dei progetti."
msgid "Something went wrong while fetching the registry list."
msgstr "Qualcosa è andato storto durante il recupero dell'elenco dei registri."
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3236,12 +3945,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr ""
msgid "StarProject|Star"
msgstr "Star"
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3251,6 +3969,15 @@ msgstr "inizia una %{new_merge_request} con queste modifiche"
msgid "Start the Runner!"
msgstr ""
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -3263,9 +3990,15 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "Cambia branch/tag"
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr ""
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3346,6 +4079,9 @@ msgstr ""
msgid "Target Branch"
msgstr "Branch di destinazione"
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr ""
@@ -3361,15 +4097,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "Lo stadio di programmazione mostra il tempo trascorso dal primo commit alla creazione di una richiesta di merge (MR). I dati saranno aggiunti una volta che avrai creato la prima richiesta di merge."
msgid "The collection of events added to the data gathered for that stage."
msgstr "L'insieme di eventi aggiunti ai dati raccolti per quello stadio."
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr "La relazione del fork è stata rimossa"
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "Lo stadio di Issue mostra il tempo che impiega un issue ad esser correlato ad una Milestone, o ad esser aggiunto ad una tua Lavagna. Inizia la creazione di problemi per visualizzare i dati in questo stadio."
@@ -3382,12 +4127,18 @@ msgstr ""
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr ""
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr "Il ciclo vitale della fase di sviluppo."
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr "Lo stadio di pianificazione mostra il tempo trascorso dal primo commit al suo step precedente. Questo periodo sarà disponibile automaticamente nel momento in cui farai il primo commit."
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr "Lo stadio di produzione mostra il tempo totale che trascorre tra la creazione di un issue il suo rilascio (inteso come codice) in produzione. Questo dato sarà disponibile automaticamente nel momento in cui avrai completato l'intero processo ideale del ciclo di produzione"
@@ -3403,6 +4154,9 @@ msgstr "La repository di questo progetto non esiste."
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "Lo stadio di revisione mostra il tempo tra una richiesta di merge al suo svolgimento effettivo. Questo dato sarà disponibile appena avrai completato una MR (Merger Request)"
@@ -3439,6 +4193,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3511,6 +4268,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr ""
@@ -3523,6 +4283,12 @@ msgstr "Il tempo che impiega un issue per esser implementato"
msgid "Time between merge request creation and merge/close"
msgstr "Il tempo tra la creazione di una richiesta di merge ed il merge/close"
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3678,6 +4444,36 @@ msgid "Tip:"
msgstr ""
msgid "Title"
+msgstr "Titolo"
+
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
msgstr ""
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
@@ -3719,18 +4515,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr ""
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3770,6 +4560,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr "clicca per caricare"
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr ""
@@ -3779,24 +4575,51 @@ msgstr ""
msgid "Use your global notification setting"
msgstr "Usa le tue impostazioni globali "
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr ""
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr "Mostra la richieste di merge aperte"
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Interno"
@@ -3824,12 +4647,18 @@ msgstr ""
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr ""
msgid "Weight"
msgstr ""
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr ""
@@ -3950,14 +4779,20 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "Stai per rimuovere il gruppo %{group_name}. I gruppi rimossi NON POSSONO esser ripristinati! Sei ASSOLUTAMENTE sicuro?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "Stai per rimuovere %{project_name_with_namespace}. I progetti rimossi NON POSSONO essere ripristinati! Sei assolutamente sicuro?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "Stai per rimuovere la relazione con il progetto sorgente %{forked_from_project}. Sei ASSOLUTAMENTE sicuro?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "Stai per trasferire %{project_name_with_namespace} ad un altro owner. Sei ASSOLUTAMENTE sicuro?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr ""
msgid "You can also create a project from the command line."
msgstr ""
@@ -4031,9 +4866,27 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4049,6 +4902,14 @@ msgstr "Il tuo nome"
msgid "Your projects"
msgstr ""
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "assign yourself"
msgstr ""
@@ -4058,12 +4919,30 @@ msgstr ""
msgid "by"
msgstr ""
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4091,9 +4970,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4106,25 +4982,28 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
@@ -4132,15 +5011,40 @@ msgid_plural "days"
msgstr[0] "giorno"
msgstr[1] "giorni"
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4152,9 +5056,21 @@ msgstr[1] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4167,6 +5083,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4194,18 +5113,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4290,6 +5218,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4328,6 +5259,9 @@ msgstr ""
msgid "personal access token"
msgstr ""
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4337,6 +5271,9 @@ msgstr ""
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
diff --git a/locale/ja/gitlab.po b/locale/ja/gitlab.po
index 180f1f0fbe7..b526b0ba202 100644
--- a/locale/ja/gitlab.po
+++ b/locale/ja/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:21-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:36-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
@@ -27,6 +27,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] ""
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -39,6 +43,10 @@ msgid "%d merge request"
msgid_plural "%d merge requests"
msgstr[0] ""
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] "パフォーマンス低下を避けるため %s 個のコミットを省略しました。"
@@ -53,6 +61,9 @@ msgid "%{count} participant"
msgid_plural "%{count} participants"
msgstr[0] ""
+msgid "%{loadingIcon} Started"
+msgstr ""
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
@@ -94,15 +105,30 @@ msgstr ""
msgid "2FA enabled"
msgstr ""
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "CIについてのグラフ"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr "自動デプロイについて"
msgid "Abuse Reports"
msgstr ""
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr ""
@@ -112,6 +138,9 @@ msgstr ""
msgid "Account"
msgstr ""
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "有効"
@@ -208,9 +237,33 @@ msgstr ""
msgid "All changes are committed"
msgstr ""
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
msgid "An error occurred previewing the blob"
msgstr ""
@@ -289,6 +342,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "Any Label"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -322,6 +378,9 @@ msgstr ""
msgid "Artifacts"
msgstr ""
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr ""
@@ -334,6 +393,15 @@ msgstr ""
msgid "Assign to"
msgstr ""
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr ""
@@ -358,6 +426,9 @@ msgstr ""
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -400,6 +471,12 @@ msgstr ""
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -482,6 +559,15 @@ msgstr "ブランチを切替"
msgid "Branches"
msgstr "ブランチ"
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr ""
@@ -527,12 +613,39 @@ msgstr ""
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr ""
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
msgstr ""
msgid "Branches|Sort by"
msgstr ""
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -578,30 +691,45 @@ msgstr "ファイルを表示"
msgid "Browse files"
msgstr "ファイルを表示"
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr "作者"
msgid "CI / CD"
msgstr ""
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
msgstr ""
+msgid "CI/CD for external repo"
+msgstr ""
+
msgid "CICD|Jobs"
msgstr ""
msgid "Cancel"
msgstr "キャンセル"
-msgid "Cancel edit"
+msgid "Cannot be merged automatically"
msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "ピック先ブランチ:"
@@ -656,6 +784,12 @@ msgstr ""
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -758,6 +892,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr ""
@@ -857,6 +1000,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr ""
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -866,6 +1012,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr ""
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr ""
@@ -884,6 +1033,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -917,6 +1069,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -977,6 +1132,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1004,6 +1162,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1126,6 +1287,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1141,9 +1308,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr ""
@@ -1189,6 +1392,12 @@ msgstr ""
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr ""
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr "貢献者向けガイド"
@@ -1252,8 +1461,8 @@ msgstr ""
msgid "Create directory"
msgstr "ディレクトリを作成"
-msgid "Create empty bare repository"
-msgstr "空のbareレポジトリーを作成"
+msgid "Create empty repository"
+msgstr ""
msgid "Create epic"
msgstr ""
@@ -1261,6 +1470,9 @@ msgstr ""
msgid "Create file"
msgstr ""
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1285,6 +1497,9 @@ msgstr ""
msgid "Create new..."
msgstr "新規作成"
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr "フォーク"
@@ -1318,6 +1533,9 @@ msgstr "カスタム通知設定"
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "\"カスタム\" の通知レベルの基本は \"参加\" と同じです。また、カスタム通知に設定することで選択したカスタムイベントの通知を受け取ることもできます。もっと詳しく知りたい場合は %{notification_link} を見てください。"
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr "サイクル分析"
@@ -1400,9 +1618,15 @@ msgstr ""
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr "次回から表示しない"
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr "ダウンロード"
@@ -1430,9 +1654,15 @@ msgstr "プレーン差分"
msgid "DownloadSource|Download"
msgstr "ダウンロード"
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr "編集"
@@ -1442,6 +1672,18 @@ msgstr "パイプラインスケジュール %{id} を編集"
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr ""
@@ -1451,6 +1693,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1511,6 +1780,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1586,9 +1858,15 @@ msgstr ""
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1598,6 +1876,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1631,6 +1912,9 @@ msgstr "ファイル"
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr "コミットメッセージで絞り込み"
@@ -1640,12 +1924,21 @@ msgstr "パスで検索"
msgid "Find file"
msgstr "ファイルを検索"
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr "初回"
msgid "FirstPushedBy|pushed by"
msgstr "プッシュした人"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] "フォーク"
@@ -1656,9 +1949,15 @@ msgstr "フォーク元"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr ""
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr ""
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr "課題が登録されてからプロダクションにデプロイされるまで"
@@ -1677,12 +1976,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1728,21 +2033,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1755,9 +2087,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1788,6 +2132,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1797,12 +2144,30 @@ msgstr ""
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr ""
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr "自分のフォークへ移動"
@@ -1869,9 +2234,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr ""
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr ""
@@ -1902,6 +2264,9 @@ msgstr ""
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr ""
@@ -1920,6 +2285,15 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1930,12 +2304,39 @@ msgstr ""
msgid "Housekeeping successfully started"
msgstr "ハウスキーピングは正常に起動しました。"
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr "レポジトリーをインポート"
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -1958,6 +2359,9 @@ msgstr[0] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2012,6 +2416,9 @@ msgstr ""
msgid "June"
msgstr ""
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2042,12 +2449,30 @@ msgstr "無効"
msgid "LFSStatus|Enabled"
msgstr "有効"
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr ""
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "過去%d日間"
@@ -2106,6 +2531,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2118,9 +2546,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr ""
@@ -2136,9 +2561,21 @@ msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr ""
@@ -2160,6 +2597,9 @@ msgstr "中央値"
msgid "Members"
msgstr ""
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr ""
@@ -2172,15 +2612,87 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr ""
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2196,6 +2708,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "SSH 鍵を追加"
@@ -2208,6 +2729,9 @@ msgstr ""
msgid "Monitoring"
msgstr ""
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2281,6 +2805,9 @@ msgstr ""
msgid "New tag"
msgstr "新規タグ"
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2299,6 +2826,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr "レポジトリーはありません"
@@ -2314,6 +2844,12 @@ msgstr ""
msgid "Not available"
msgstr "利用できません"
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2323,6 +2859,18 @@ msgstr "データ不足"
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr "イベント通知"
@@ -2407,6 +2955,12 @@ msgstr ""
msgid "OfSearchInADropdown|Filter"
msgstr "フィルター"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr ""
@@ -2428,12 +2982,18 @@ msgstr "オプション"
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Owner"
msgstr "オーナー"
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr ""
@@ -2446,9 +3006,21 @@ msgstr ""
msgid "Pagination|« First"
msgstr ""
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr ""
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr "パイプライン"
@@ -2530,9 +3102,36 @@ msgstr ""
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2563,6 +3162,9 @@ msgstr "ステージあり"
msgid "Pipeline|with stages"
msgstr "ステージあり"
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2572,6 +3174,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -2626,6 +3234,9 @@ msgstr ""
msgid "Profiles|your account"
msgstr ""
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2650,9 +3261,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr ""
@@ -2749,6 +3357,12 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2761,9 +3375,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr ""
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr ""
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2776,19 +3402,13 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr ""
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr ""
-
msgid "PrometheusService|Missing environment variable"
msgstr ""
-msgid "PrometheusService|Monitored"
-msgstr ""
-
msgid "PrometheusService|More information"
msgstr ""
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
+msgid "PrometheusService|New metric"
msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
@@ -2797,6 +3417,9 @@ msgstr ""
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2806,7 +3429,16 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
msgstr ""
msgid "Protip:"
@@ -2842,6 +3474,9 @@ msgstr "続きを読む"
msgid "Readme"
msgstr ""
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "ブランチ"
@@ -2875,6 +3510,9 @@ msgstr "関連するマージリクエスト"
msgid "Related Merged Requests"
msgstr "関連するマージリクエスト"
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr "後で通知"
@@ -2890,12 +3528,24 @@ msgstr "プロジェクトを削除"
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr ""
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr "アクセス権限をリクエストする"
@@ -2911,6 +3561,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] ""
@@ -2921,9 +3574,36 @@ msgstr "このコミットをリバート"
msgid "Revert this merge request"
msgstr "このマージリクエストをリバート"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr ""
@@ -2939,6 +3619,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr "新しいパイプラインのスケジュールを作成"
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -2948,6 +3631,9 @@ msgstr "パイプラインスケジューリング"
msgid "Scoped issue boards"
msgstr ""
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr "ブランチまたはタグを検索"
@@ -3011,15 +3697,33 @@ msgstr ""
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "%{protocol} プロコトル経由でプル、プッシュするためにアカウントのパスワードを設定。"
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr "Koding を設定"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "パスワードを設定"
@@ -3029,6 +3733,9 @@ msgstr ""
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3063,6 +3770,18 @@ msgstr ""
msgid "Sidebar|Weight"
msgstr ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr ""
@@ -3072,16 +3791,10 @@ msgstr ""
msgid "Something went wrong on our end."
msgstr ""
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr ""
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3093,12 +3806,6 @@ msgstr ""
msgid "Something went wrong while fetching the registry list."
msgstr ""
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3216,12 +3923,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr ""
msgid "StarProject|Star"
msgstr "スターを付ける"
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3231,6 +3947,15 @@ msgstr "この変更で %{new_merge_request} を作成する"
msgid "Start the Runner!"
msgstr ""
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -3243,9 +3968,15 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "ブランチ・タグ切り替え"
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr ""
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3325,6 +4056,9 @@ msgstr ""
msgid "Target Branch"
msgstr "ターゲットブランチ"
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr ""
@@ -3340,15 +4074,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "コーディングステージでは、最初のコミットからマージリクエストが作成されるまでの時間が表示されます。このデータは最初のマージリクエストが作成されたときに自動的に追加されます。"
msgid "The collection of events added to the data gathered for that stage."
msgstr "このステージで計測データに追加されたイベントリスト"
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr "フォークのリレーションが削除されました。"
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "課題ステージでは、課題が登録されてからマイルストーンに割り当てられるか、課題ボードのリストに追加されるまでの時間が表示されます。このリストに表示するには課題を最初に作成してください。"
@@ -3361,12 +4104,18 @@ msgstr ""
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr ""
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr "開発ライフサイクルの段階"
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr "計画ステージでは、課題ステージに登録されてからプッシュされた最初のコミット時刻までの時間が表示されます。最初のコミットがプッシュされときに自動的に追加されます。"
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr "プロダクションステージでは、課題が作成されてからプロダクションへデプロイされるまでの時間が表示されます。アイディアの時点からプロダクションまでの全ステージが完了したときに自動的に追加されます。"
@@ -3382,6 +4131,9 @@ msgstr "このプロジェクトにレポジトリーはありません。"
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "レビューステージとは、マージリクエストを作成してからマージするまでの時間です。このデータは最初のマージリクエストがマージされたときに自動的に追加されます。"
@@ -3418,6 +4170,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3490,6 +4245,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr ""
@@ -3502,6 +4260,12 @@ msgstr "課題の実装が開始されるまでの時間"
msgid "Time between merge request creation and merge/close"
msgstr "マージリクエストが作成されてからマージまたはクローズされるまでの時間"
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3657,6 +4421,36 @@ msgstr ""
msgid "Title"
msgstr ""
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
@@ -3696,18 +4490,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr ""
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3747,6 +4535,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr "クリックしてアップロード"
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr ""
@@ -3756,24 +4550,51 @@ msgstr ""
msgid "Use your global notification setting"
msgstr "全体通知設定を利用"
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr ""
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr "オープンなマージリクエストを表示"
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "内部"
@@ -3801,12 +4622,18 @@ msgstr ""
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr ""
msgid "Weight"
msgstr ""
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr ""
@@ -3927,14 +4754,20 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "%{group_name} グループを削除しようとしています。 削除されたグループは絶対に元に戻せません!本当によろしいですか?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "%{project_name_with_namespace} プロジェクトを削除しようとしています。削除されたプロジェクトは絶対に元には戻せません!本当によろしいですか?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "元のプロジェクト (%{forked_from_project}) とのリレーションを削除しようとしています。本当によろしいですか?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "%{project_name_with_namespace} プロジェクトを別のオーナーに移譲しようとしています。本当によろしいですか?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr ""
msgid "You can also create a project from the command line."
msgstr ""
@@ -4008,9 +4841,27 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4026,6 +4877,13 @@ msgstr "名前"
msgid "Your projects"
msgstr ""
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+
msgid "assign yourself"
msgstr ""
@@ -4035,12 +4893,30 @@ msgstr ""
msgid "by"
msgstr ""
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4068,9 +4944,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4083,40 +4956,66 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
msgid_plural "days"
msgstr[0] "日"
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4127,9 +5026,21 @@ msgstr[0] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4142,6 +5053,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4169,18 +5083,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4265,6 +5188,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4302,6 +5228,9 @@ msgstr ""
msgid "personal access token"
msgstr ""
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4311,6 +5240,9 @@ msgstr ""
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
diff --git a/locale/ko/gitlab.po b/locale/ko/gitlab.po
index 13634091ed7..91f68dfdee1 100644
--- a/locale/ko/gitlab.po
+++ b/locale/ko/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:19-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:34-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Korean\n"
"Language: ko_KR\n"
@@ -27,6 +27,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] ""
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -39,6 +43,10 @@ msgid "%d merge request"
msgid_plural "%d merge requests"
msgstr[0] ""
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] "%s 추가 커밋은 성능 이슈를 방지하기 위해 생략되었습니다."
@@ -53,6 +61,9 @@ msgid "%{count} participant"
msgid_plural "%{count} participants"
msgstr[0] ""
+msgid "%{loadingIcon} Started"
+msgstr ""
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
@@ -94,15 +105,30 @@ msgstr ""
msgid "2FA enabled"
msgstr ""
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "지속적인 통합에 관한 그래프 모음"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr "자동 배포 정보"
msgid "Abuse Reports"
msgstr ""
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr ""
@@ -112,6 +138,9 @@ msgstr "오동작중인 저장공간에 대한 접근이 복구 작업을 위해
msgid "Account"
msgstr ""
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "활성"
@@ -208,9 +237,33 @@ msgstr "전체"
msgid "All changes are committed"
msgstr ""
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
msgid "An error occurred previewing the blob"
msgstr ""
@@ -289,6 +342,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "Any Label"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -322,6 +378,9 @@ msgstr "확실합니까?"
msgid "Artifacts"
msgstr ""
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr ""
@@ -334,6 +393,15 @@ msgstr ""
msgid "Assign to"
msgstr ""
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr ""
@@ -358,6 +426,9 @@ msgstr ""
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -400,6 +471,12 @@ msgstr ""
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -482,6 +559,15 @@ msgstr "브랜치 변경"
msgid "Branches"
msgstr "브랜치"
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr ""
@@ -527,12 +613,39 @@ msgstr ""
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr ""
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
msgstr ""
msgid "Branches|Sort by"
msgstr ""
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -578,30 +691,45 @@ msgstr "파일 찾아보기"
msgid "Browse files"
msgstr "파일 찾아보기"
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr "작성자"
msgid "CI / CD"
msgstr ""
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
msgstr ""
+msgid "CI/CD for external repo"
+msgstr ""
+
msgid "CICD|Jobs"
msgstr ""
msgid "Cancel"
msgstr "취소"
-msgid "Cancel edit"
+msgid "Cannot be merged automatically"
msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "브랜치에서 Pick"
@@ -656,6 +784,12 @@ msgstr ""
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -758,6 +892,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr ""
@@ -857,6 +1000,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr ""
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -866,6 +1012,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr ""
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr ""
@@ -884,6 +1033,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -917,6 +1069,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -977,6 +1132,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1004,6 +1162,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1126,6 +1287,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1141,9 +1308,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr ""
@@ -1189,6 +1392,12 @@ msgstr ""
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr ""
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr "기여에 대한 안내"
@@ -1252,8 +1461,8 @@ msgstr ""
msgid "Create directory"
msgstr "디렉토리 만들기"
-msgid "Create empty bare repository"
-msgstr "빈 bare 저장소 만들기"
+msgid "Create empty repository"
+msgstr ""
msgid "Create epic"
msgstr ""
@@ -1261,6 +1470,9 @@ msgstr ""
msgid "Create file"
msgstr ""
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1285,6 +1497,9 @@ msgstr ""
msgid "Create new..."
msgstr "새로 만들기 ..."
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr "포크"
@@ -1318,6 +1533,9 @@ msgstr "사용자 정의 알림 이벤트"
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "사용자 정의 알림 수준은 참여 수준과 동일합니다. 맞춤 알림 수준을 사용하면 일부 이벤트에 대한 알림도 받게됩니다. 자세한 내용은 %{notification_link}을 확인하십시오."
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr ""
@@ -1400,9 +1618,15 @@ msgstr ""
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr "다시 표시하지 않음"
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr "다운로드"
@@ -1430,9 +1654,15 @@ msgstr "Plain Diff"
msgid "DownloadSource|Download"
msgstr "다운로드"
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr "편집"
@@ -1442,6 +1672,18 @@ msgstr "파이프라인 스케줄 편집 %{id}"
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr ""
@@ -1451,6 +1693,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1511,6 +1780,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1586,9 +1858,15 @@ msgstr ""
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1598,6 +1876,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1631,6 +1912,9 @@ msgstr "파일"
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr "커밋 메시지로 필터"
@@ -1640,12 +1924,21 @@ msgstr "경로로 찾기"
msgid "Find file"
msgstr "파일 찾기"
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr "처음"
msgid "FirstPushedBy|pushed by"
msgstr "푸시한 사용자"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] "포크"
@@ -1656,9 +1949,15 @@ msgstr "포크한 사용자"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr ""
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr ""
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr "이슈 생성에서 프로덕션 배포까지"
@@ -1677,12 +1976,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1728,21 +2033,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1755,9 +2087,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1788,6 +2132,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1797,12 +2144,30 @@ msgstr "git storage 상태 정보가 초기화되었습니다."
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr "GitLab Runner 섹션"
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr "당신의 포크로 이동하세요"
@@ -1869,9 +2234,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr ""
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr ""
@@ -1902,6 +2264,9 @@ msgstr ""
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr "헬스 체크"
@@ -1920,6 +2285,15 @@ msgstr " 헬스 문제가 발견되지 않았습니다."
msgid "HealthCheck|Unhealthy"
msgstr "비정상"
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1930,12 +2304,39 @@ msgstr ""
msgid "Housekeeping successfully started"
msgstr "Housekeeping이 성공적으로 시작되었습니다"
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr "저장소 가져 오기"
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -1958,6 +2359,9 @@ msgstr[0] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2012,6 +2416,9 @@ msgstr ""
msgid "June"
msgstr ""
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2042,12 +2449,30 @@ msgstr "Disabled"
msgid "LFSStatus|Enabled"
msgstr "Enabled"
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr ""
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "최근 %d 일"
@@ -2106,6 +2531,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2118,9 +2546,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr ""
@@ -2136,9 +2561,21 @@ msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr ""
@@ -2160,6 +2597,9 @@ msgstr "중앙값"
msgid "Members"
msgstr ""
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr ""
@@ -2172,15 +2612,87 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr ""
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2196,6 +2708,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "SSH 키 추가"
@@ -2208,6 +2729,9 @@ msgstr ""
msgid "Monitoring"
msgstr ""
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2281,6 +2805,9 @@ msgstr ""
msgid "New tag"
msgstr "새 태그 "
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2299,6 +2826,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr "저장소 없음"
@@ -2314,6 +2844,12 @@ msgstr ""
msgid "Not available"
msgstr "사용할 수 없음"
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2323,6 +2859,18 @@ msgstr "데이터가 충분하지 않습니다."
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr "알림 이벤트"
@@ -2407,6 +2955,12 @@ msgstr ""
msgid "OfSearchInADropdown|Filter"
msgstr "필터"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr ""
@@ -2428,12 +2982,18 @@ msgstr "옵션 "
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Owner"
msgstr "소유자"
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr ""
@@ -2446,9 +3006,21 @@ msgstr ""
msgid "Pagination|« First"
msgstr ""
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr ""
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr "파이프라인"
@@ -2530,9 +3102,36 @@ msgstr ""
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2563,6 +3162,9 @@ msgstr "스테이징"
msgid "Pipeline|with stages"
msgstr "스테이징"
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2572,6 +3174,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -2626,6 +3234,9 @@ msgstr ""
msgid "Profiles|your account"
msgstr ""
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2650,9 +3261,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr "프로젝트 상세"
@@ -2749,6 +3357,12 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2761,9 +3375,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr ""
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr ""
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2776,19 +3402,13 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr ""
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr ""
-
msgid "PrometheusService|Missing environment variable"
msgstr ""
-msgid "PrometheusService|Monitored"
-msgstr ""
-
msgid "PrometheusService|More information"
msgstr ""
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
+msgid "PrometheusService|New metric"
msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
@@ -2797,6 +3417,9 @@ msgstr ""
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2806,7 +3429,16 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
msgstr ""
msgid "Protip:"
@@ -2842,6 +3474,9 @@ msgstr "더 읽기"
msgid "Readme"
msgstr ""
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "브랜치"
@@ -2875,6 +3510,9 @@ msgstr "관련 머지 리퀘스트"
msgid "Related Merged Requests"
msgstr "관련 머지 리퀘스트"
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr "나중에 다시 알림"
@@ -2890,12 +3528,24 @@ msgstr "프로젝트 삭제"
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr ""
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr "액세스 요청"
@@ -2911,6 +3561,9 @@ msgstr "runner 등록 토큰 초기화"
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] ""
@@ -2921,9 +3574,36 @@ msgstr "이 커밋 되돌리기"
msgid "Revert this merge request"
msgstr "이 머지 리퀘스트 되돌리기"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr ""
@@ -2939,6 +3619,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr "새로운 파이프라인 스케줄 잡기"
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -2948,6 +3631,9 @@ msgstr "파이프라인 스케줄링"
msgid "Scoped issue boards"
msgstr ""
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr "브랜치 및 태그 검색"
@@ -3011,15 +3697,33 @@ msgstr ""
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "%{protocol} 프로토콜을 통해 Pull 하거나 Push하려면 계정에 패스워드를 설정하십시오."
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr "Koding 설정"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "패스워드 설정"
@@ -3029,6 +3733,9 @@ msgstr ""
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3063,6 +3770,18 @@ msgstr ""
msgid "Sidebar|Weight"
msgstr ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr ""
@@ -3072,16 +3791,10 @@ msgstr ""
msgid "Something went wrong on our end."
msgstr ""
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr ""
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3093,12 +3806,6 @@ msgstr ""
msgid "Something went wrong while fetching the registry list."
msgstr ""
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3216,12 +3923,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr "Runner 설정 중 다음 URL을 지정하세요."
msgid "StarProject|Star"
msgstr "별표"
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3231,6 +3947,15 @@ msgstr "이 변경 사항으로 %{new_merge_request} 을 시작하십시오."
msgid "Start the Runner!"
msgstr "Runner 시작!"
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -3243,9 +3968,15 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "스위치 브랜치/태그"
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr ""
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3325,6 +4056,9 @@ msgstr ""
msgid "Target Branch"
msgstr "대상 브랜치"
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr ""
@@ -3340,15 +4074,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "Coding Stage는 첫 번째 커밋에서부터 머지 리퀘스트 생성까지의 시간을 보여줍니다. 첫 번째 머지 리퀘스트을 생성하면 데이터가 자동으로 여기에 추가됩니다."
msgid "The collection of events added to the data gathered for that stage."
msgstr "해당 단계에서 수집 된 데이터가 이벤트 모음에 추가되었습니다."
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr "포크 관계가 제거되었습니다."
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "이슈 단계에는 이슈를 작성하여 마일스톤으로 지정하는 데 걸리는 시간 또는 이슈 보드의 목록에 이슈를 추가하는 시간이 표시됩니다. 이 단계의 데이터를 보기 위해서는 이슈를 먼저 작성해야 합니다."
@@ -3361,12 +4104,18 @@ msgstr ""
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr ""
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr "개발 수명주기의 단계."
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr "계획 단계에서는 이전 단계에서 첫 번째 커밋 시간이 표시됩니다. 이 시간은 첫 번째 커밋을 누르면 자동으로 추가됩니다."
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr "프로덕션 단계에서는 문제를 만들고 코드를 프로덕션 환경으로 배포하는 데 걸리는 총 시간을 보여줍니다. 생산주기에 대한 완전한 아이디어를 얻은 후에는 데이터가 자동으로 추가됩니다."
@@ -3382,6 +4131,9 @@ msgstr "이 프로젝트의 저장소가 존재하지 않습니다."
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "Review 단계에서는 머지 리퀘스트를 작성한 후 머지하기까지의 시간을 보여줍니다. 데이터는 첫 번째 머지 리퀘스트을 머지 한 후에 자동으로 추가됩니다."
@@ -3418,6 +4170,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr "git storage에 접근하는데 문제가 발생했습니다. "
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3490,6 +4245,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr ""
@@ -3502,6 +4260,12 @@ msgstr "이슈가 구현되기 전의 시간"
msgid "Time between merge request creation and merge/close"
msgstr "머지 리퀘스트 생성과 머지 / 닫기 사이의 시간"
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3657,6 +4421,36 @@ msgstr ""
msgid "Title"
msgstr ""
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
@@ -3696,18 +4490,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr ""
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3747,6 +4535,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr "업로드하려면 클릭하십시오."
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr ""
@@ -3756,24 +4550,51 @@ msgstr "설정 중에 다음 등록 토큰 이용 : "
msgid "Use your global notification setting"
msgstr "전체 알림 설정 사용"
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr ""
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr "열린 머지 리퀘스트보기"
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "내부"
@@ -3801,12 +4622,18 @@ msgstr ""
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr ""
msgid "Weight"
msgstr ""
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr ""
@@ -3927,14 +4754,20 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "%{group_name} 그룹을 제거하려고합니다. \\\"정말로\\\" 확실합니까?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "%{project_name_with_namespace} 프로젝트를 삭제하려고합니다. \"삭제된 프로젝트를 복원 할 수 없습니다! \\\"정말로\\\" 확실합니까?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "포크 관계를 소스 프로젝트 %{forked_from_project}에 대해 제거하려고합니다. \"정말로\" 확실합니까?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "%{project_name_with_namespace}을 다른 소유자에게 이전하려고합니다. \"정말로\" 확실합니까?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr ""
msgid "You can also create a project from the command line."
msgstr ""
@@ -4008,9 +4841,27 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4026,6 +4877,13 @@ msgstr "귀하의 이름"
msgid "Your projects"
msgstr ""
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+
msgid "assign yourself"
msgstr ""
@@ -4035,12 +4893,30 @@ msgstr ""
msgid "by"
msgstr ""
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4068,9 +4944,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4083,40 +4956,66 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
msgid_plural "days"
msgstr[0] "일"
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4127,9 +5026,21 @@ msgstr[0] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4142,6 +5053,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4169,18 +5083,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4265,6 +5188,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4302,6 +5228,9 @@ msgstr ""
msgid "personal access token"
msgstr ""
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4311,6 +5240,9 @@ msgstr ""
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
diff --git a/locale/nl_NL/gitlab.po b/locale/nl_NL/gitlab.po
index ce3f2e5627e..1b3811198a8 100644
--- a/locale/nl_NL/gitlab.po
+++ b/locale/nl_NL/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:22-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:39-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"
@@ -29,6 +29,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -44,6 +49,11 @@ msgid_plural "%d merge requests"
msgstr[0] ""
msgstr[1] ""
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] "%s andere commit is weggelaten om prestatieproblemen te voorkomen."
@@ -60,6 +70,9 @@ msgid_plural "%{count} participants"
msgstr[0] ""
msgstr[1] ""
+msgid "%{loadingIcon} Started"
+msgstr ""
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
@@ -103,15 +116,30 @@ msgstr ""
msgid "2FA enabled"
msgstr ""
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr ""
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr "Over auto deploy"
msgid "Abuse Reports"
msgstr "Misbruik rapporten"
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr "Toegangstokens"
@@ -121,6 +149,9 @@ msgstr ""
msgid "Account"
msgstr "Account"
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "Actief"
@@ -217,9 +248,33 @@ msgstr "Alles"
msgid "All changes are committed"
msgstr ""
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
msgid "An error occurred previewing the blob"
msgstr ""
@@ -298,6 +353,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "Any Label"
+msgstr ""
+
msgid "Appearance"
msgstr "Uiterlijk"
@@ -331,6 +389,9 @@ msgstr ""
msgid "Artifacts"
msgstr ""
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr ""
@@ -343,6 +404,15 @@ msgstr ""
msgid "Assign to"
msgstr ""
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr ""
@@ -367,6 +437,9 @@ msgstr ""
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -409,6 +482,12 @@ msgstr ""
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -492,6 +571,15 @@ msgstr "BranchSwitcherTitle|Ga naar branch"
msgid "Branches"
msgstr "Branches"
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr "Branches|Kan geen HEAD-commit vinden voor deze branch"
@@ -537,12 +625,39 @@ msgstr ""
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr ""
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
msgstr ""
msgid "Branches|Sort by"
msgstr ""
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -588,30 +703,45 @@ msgstr "Door bestanden bladeren"
msgid "Browse files"
msgstr "Door bestanden bladeren"
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr "door"
msgid "CI / CD"
msgstr "CI / CD"
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
msgstr ""
+msgid "CI/CD for external repo"
+msgstr ""
+
msgid "CICD|Jobs"
msgstr ""
msgid "Cancel"
msgstr "Annuleren"
-msgid "Cancel edit"
-msgstr "Bewerken annuleren"
+msgid "Cannot be merged automatically"
+msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr ""
@@ -666,6 +796,12 @@ msgstr ""
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -768,6 +904,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr ""
@@ -867,6 +1012,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr ""
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -876,6 +1024,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr ""
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr ""
@@ -894,6 +1045,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -927,6 +1081,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -987,6 +1144,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1014,6 +1174,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1138,6 +1301,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1153,9 +1322,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr ""
@@ -1201,6 +1406,12 @@ msgstr ""
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr ""
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr ""
@@ -1264,7 +1475,7 @@ msgstr ""
msgid "Create directory"
msgstr "Maak map aan"
-msgid "Create empty bare repository"
+msgid "Create empty repository"
msgstr ""
msgid "Create epic"
@@ -1273,6 +1484,9 @@ msgstr ""
msgid "Create file"
msgstr ""
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1297,6 +1511,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr ""
@@ -1330,6 +1547,9 @@ msgstr ""
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr ""
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr ""
@@ -1413,9 +1633,15 @@ msgstr ""
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr ""
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr ""
@@ -1443,9 +1669,15 @@ msgstr ""
msgid "DownloadSource|Download"
msgstr ""
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr ""
@@ -1455,6 +1687,18 @@ msgstr ""
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr ""
@@ -1464,6 +1708,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1524,6 +1795,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1599,9 +1873,15 @@ msgstr ""
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1611,6 +1891,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1644,6 +1927,9 @@ msgstr ""
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr ""
@@ -1653,12 +1939,21 @@ msgstr ""
msgid "Find file"
msgstr ""
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr ""
msgid "FirstPushedBy|pushed by"
msgstr ""
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] ""
@@ -1670,9 +1965,15 @@ msgstr ""
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr ""
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr ""
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr ""
@@ -1691,12 +1992,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1742,21 +2049,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1769,9 +2103,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1802,6 +2148,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1811,12 +2160,30 @@ msgstr ""
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr ""
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
@@ -1883,9 +2250,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr ""
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr ""
@@ -1916,6 +2280,9 @@ msgstr ""
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr ""
@@ -1934,6 +2301,15 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1945,12 +2321,39 @@ msgstr ""
msgid "Housekeeping successfully started"
msgstr ""
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr ""
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -1974,6 +2377,9 @@ msgstr[1] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2028,6 +2434,9 @@ msgstr ""
msgid "June"
msgstr ""
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2058,12 +2467,30 @@ msgstr ""
msgid "LFSStatus|Enabled"
msgstr ""
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr ""
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] ""
@@ -2123,6 +2550,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2135,9 +2565,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr ""
@@ -2153,9 +2580,21 @@ msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr ""
@@ -2177,6 +2616,9 @@ msgstr ""
msgid "Members"
msgstr ""
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr ""
@@ -2189,15 +2631,87 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr ""
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2213,6 +2727,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr ""
@@ -2225,6 +2748,9 @@ msgstr ""
msgid "Monitoring"
msgstr ""
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2299,6 +2825,9 @@ msgstr ""
msgid "New tag"
msgstr ""
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2317,6 +2846,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr ""
@@ -2332,6 +2864,12 @@ msgstr ""
msgid "Not available"
msgstr ""
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2341,6 +2879,18 @@ msgstr ""
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr ""
@@ -2425,6 +2975,12 @@ msgstr ""
msgid "OfSearchInADropdown|Filter"
msgstr ""
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr ""
@@ -2446,12 +3002,18 @@ msgstr ""
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Owner"
msgstr ""
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr ""
@@ -2464,9 +3026,21 @@ msgstr ""
msgid "Pagination|« First"
msgstr ""
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr ""
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr ""
@@ -2548,9 +3122,36 @@ msgstr ""
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2581,6 +3182,9 @@ msgstr ""
msgid "Pipeline|with stages"
msgstr ""
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2590,6 +3194,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -2644,6 +3254,9 @@ msgstr ""
msgid "Profiles|your account"
msgstr ""
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2668,9 +3281,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr ""
@@ -2767,6 +3377,12 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2779,9 +3395,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr ""
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr ""
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2794,19 +3422,13 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr ""
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr ""
-
msgid "PrometheusService|Missing environment variable"
msgstr ""
-msgid "PrometheusService|Monitored"
-msgstr ""
-
msgid "PrometheusService|More information"
msgstr ""
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
+msgid "PrometheusService|New metric"
msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
@@ -2815,6 +3437,9 @@ msgstr ""
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2824,7 +3449,16 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
msgstr ""
msgid "Protip:"
@@ -2860,6 +3494,9 @@ msgstr ""
msgid "Readme"
msgstr ""
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr ""
@@ -2893,6 +3530,9 @@ msgstr ""
msgid "Related Merged Requests"
msgstr ""
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -2908,12 +3548,24 @@ msgstr ""
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr ""
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr ""
@@ -2929,6 +3581,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] ""
@@ -2940,9 +3595,36 @@ msgstr ""
msgid "Revert this merge request"
msgstr ""
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr ""
@@ -2958,6 +3640,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr ""
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -2967,6 +3652,9 @@ msgstr ""
msgid "Scoped issue boards"
msgstr ""
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr ""
@@ -3030,15 +3718,33 @@ msgstr ""
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr ""
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr ""
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -3048,6 +3754,9 @@ msgstr ""
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3083,6 +3792,18 @@ msgstr ""
msgid "Sidebar|Weight"
msgstr ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr ""
@@ -3092,16 +3813,10 @@ msgstr ""
msgid "Something went wrong on our end."
msgstr ""
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr ""
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3113,12 +3828,6 @@ msgstr ""
msgid "Something went wrong while fetching the registry list."
msgstr ""
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3236,12 +3945,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr ""
msgid "StarProject|Star"
msgstr ""
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3251,6 +3969,15 @@ msgstr ""
msgid "Start the Runner!"
msgstr ""
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -3263,9 +3990,15 @@ msgstr ""
msgid "Switch branch/tag"
msgstr ""
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr ""
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3346,6 +4079,9 @@ msgstr ""
msgid "Target Branch"
msgstr ""
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr ""
@@ -3361,15 +4097,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr ""
msgid "The collection of events added to the data gathered for that stage."
msgstr ""
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr ""
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr ""
@@ -3382,12 +4127,18 @@ msgstr ""
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr ""
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr ""
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr ""
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr ""
@@ -3403,6 +4154,9 @@ msgstr ""
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr ""
@@ -3439,6 +4193,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3511,6 +4268,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr ""
@@ -3523,6 +4283,12 @@ msgstr ""
msgid "Time between merge request creation and merge/close"
msgstr ""
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3680,6 +4446,36 @@ msgstr ""
msgid "Title"
msgstr ""
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
@@ -3719,18 +4515,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr ""
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3770,6 +4560,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr ""
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr ""
@@ -3779,24 +4575,51 @@ msgstr ""
msgid "Use your global notification setting"
msgstr ""
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr ""
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr ""
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr ""
@@ -3824,12 +4647,18 @@ msgstr ""
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr ""
msgid "Weight"
msgstr ""
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr ""
@@ -3950,13 +4779,19 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr ""
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
msgstr ""
msgid "You can also create a project from the command line."
@@ -4031,9 +4866,27 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4049,6 +4902,14 @@ msgstr ""
msgid "Your projects"
msgstr ""
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "assign yourself"
msgstr ""
@@ -4058,12 +4919,30 @@ msgstr ""
msgid "by"
msgstr ""
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4091,9 +4970,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4106,25 +4982,28 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
@@ -4132,15 +5011,40 @@ msgid_plural "days"
msgstr[0] ""
msgstr[1] ""
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4152,9 +5056,21 @@ msgstr[1] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4167,6 +5083,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4194,18 +5113,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4290,6 +5218,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4328,6 +5259,9 @@ msgstr ""
msgid "personal access token"
msgstr ""
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4337,6 +5271,9 @@ msgstr ""
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
diff --git a/locale/pl_PL/gitlab.po b/locale/pl_PL/gitlab.po
index 8e414d0d07b..4ae57235f90 100644
--- a/locale/pl_PL/gitlab.po
+++ b/locale/pl_PL/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:21-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:36-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Polish\n"
"Language: pl_PL\n"
@@ -33,6 +33,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -54,6 +61,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] ""
@@ -74,6 +88,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{loadingIcon} Started"
+msgstr ""
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
@@ -121,15 +138,30 @@ msgstr ""
msgid "2FA enabled"
msgstr ""
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr ""
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr ""
msgid "Abuse Reports"
msgstr ""
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr ""
@@ -139,6 +171,9 @@ msgstr ""
msgid "Account"
msgstr ""
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr ""
@@ -235,9 +270,33 @@ msgstr ""
msgid "All changes are committed"
msgstr ""
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
msgid "An error occurred previewing the blob"
msgstr ""
@@ -316,6 +375,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "Any Label"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -349,6 +411,9 @@ msgstr ""
msgid "Artifacts"
msgstr ""
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr ""
@@ -361,6 +426,15 @@ msgstr ""
msgid "Assign to"
msgstr ""
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr ""
@@ -385,6 +459,9 @@ msgstr ""
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -427,6 +504,12 @@ msgstr ""
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -512,6 +595,15 @@ msgstr ""
msgid "Branches"
msgstr ""
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr ""
@@ -557,12 +649,39 @@ msgstr ""
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr ""
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
msgstr ""
msgid "Branches|Sort by"
msgstr ""
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -608,30 +727,45 @@ msgstr ""
msgid "Browse files"
msgstr ""
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr ""
msgid "CI / CD"
msgstr ""
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
msgstr ""
+msgid "CI/CD for external repo"
+msgstr ""
+
msgid "CICD|Jobs"
msgstr ""
msgid "Cancel"
msgstr ""
-msgid "Cancel edit"
+msgid "Cannot be merged automatically"
msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr ""
@@ -686,6 +820,12 @@ msgstr ""
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -788,6 +928,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr ""
@@ -887,6 +1036,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr ""
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -896,6 +1048,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr ""
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr ""
@@ -914,6 +1069,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -947,6 +1105,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -1007,6 +1168,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1034,6 +1198,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1162,6 +1329,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1177,9 +1350,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr ""
@@ -1225,6 +1434,12 @@ msgstr ""
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr ""
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr ""
@@ -1288,7 +1503,7 @@ msgstr ""
msgid "Create directory"
msgstr ""
-msgid "Create empty bare repository"
+msgid "Create empty repository"
msgstr ""
msgid "Create epic"
@@ -1297,6 +1512,9 @@ msgstr ""
msgid "Create file"
msgstr ""
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1321,6 +1539,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr ""
@@ -1354,6 +1575,9 @@ msgstr ""
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr ""
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr ""
@@ -1439,9 +1663,15 @@ msgstr ""
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr ""
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr ""
@@ -1469,9 +1699,15 @@ msgstr ""
msgid "DownloadSource|Download"
msgstr ""
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr ""
@@ -1481,6 +1717,18 @@ msgstr ""
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr ""
@@ -1490,6 +1738,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1550,6 +1825,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1625,9 +1903,15 @@ msgstr ""
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1637,6 +1921,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1670,6 +1957,9 @@ msgstr ""
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr ""
@@ -1679,12 +1969,21 @@ msgstr ""
msgid "Find file"
msgstr ""
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr ""
msgid "FirstPushedBy|pushed by"
msgstr ""
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] ""
@@ -1698,9 +1997,15 @@ msgstr ""
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr ""
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr ""
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr ""
@@ -1719,12 +2024,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1770,21 +2081,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1797,9 +2135,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1830,6 +2180,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1839,12 +2192,30 @@ msgstr ""
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr ""
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
@@ -1911,9 +2282,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr ""
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr ""
@@ -1944,6 +2312,9 @@ msgstr ""
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr ""
@@ -1962,6 +2333,15 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1975,12 +2355,39 @@ msgstr ""
msgid "Housekeeping successfully started"
msgstr ""
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr ""
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -2006,6 +2413,9 @@ msgstr[3] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2060,6 +2470,9 @@ msgstr ""
msgid "June"
msgstr ""
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2090,12 +2503,30 @@ msgstr ""
msgid "LFSStatus|Enabled"
msgstr ""
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr ""
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] ""
@@ -2157,6 +2588,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2169,9 +2603,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr ""
@@ -2187,9 +2618,21 @@ msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr ""
@@ -2211,6 +2654,9 @@ msgstr ""
msgid "Members"
msgstr ""
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr ""
@@ -2223,15 +2669,87 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr ""
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2247,6 +2765,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr ""
@@ -2259,6 +2786,9 @@ msgstr ""
msgid "Monitoring"
msgstr ""
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2335,6 +2865,9 @@ msgstr ""
msgid "New tag"
msgstr ""
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2353,6 +2886,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr ""
@@ -2368,6 +2904,12 @@ msgstr ""
msgid "Not available"
msgstr ""
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2377,6 +2919,18 @@ msgstr ""
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr ""
@@ -2461,6 +3015,12 @@ msgstr ""
msgid "OfSearchInADropdown|Filter"
msgstr ""
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr ""
@@ -2482,12 +3042,18 @@ msgstr ""
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Owner"
msgstr ""
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr ""
@@ -2500,9 +3066,21 @@ msgstr ""
msgid "Pagination|« First"
msgstr ""
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr ""
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr ""
@@ -2584,9 +3162,36 @@ msgstr ""
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2617,6 +3222,9 @@ msgstr ""
msgid "Pipeline|with stages"
msgstr ""
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2626,6 +3234,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -2680,6 +3294,9 @@ msgstr ""
msgid "Profiles|your account"
msgstr ""
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2704,9 +3321,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr ""
@@ -2803,6 +3417,12 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2815,9 +3435,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr ""
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr ""
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2830,19 +3462,13 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr ""
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr ""
-
msgid "PrometheusService|Missing environment variable"
msgstr ""
-msgid "PrometheusService|Monitored"
-msgstr ""
-
msgid "PrometheusService|More information"
msgstr ""
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
+msgid "PrometheusService|New metric"
msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
@@ -2851,6 +3477,9 @@ msgstr ""
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2860,7 +3489,16 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
msgstr ""
msgid "Protip:"
@@ -2896,6 +3534,9 @@ msgstr ""
msgid "Readme"
msgstr ""
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr ""
@@ -2929,6 +3570,9 @@ msgstr ""
msgid "Related Merged Requests"
msgstr ""
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -2944,12 +3588,24 @@ msgstr ""
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr ""
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr ""
@@ -2965,6 +3621,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] ""
@@ -2978,9 +3637,36 @@ msgstr ""
msgid "Revert this merge request"
msgstr ""
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr ""
@@ -2996,6 +3682,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr ""
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -3005,6 +3694,9 @@ msgstr ""
msgid "Scoped issue boards"
msgstr ""
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr ""
@@ -3068,15 +3760,33 @@ msgstr ""
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr ""
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr ""
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -3086,6 +3796,9 @@ msgstr ""
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3123,6 +3836,18 @@ msgstr ""
msgid "Sidebar|Weight"
msgstr ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr ""
@@ -3132,16 +3857,10 @@ msgstr ""
msgid "Something went wrong on our end."
msgstr ""
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr ""
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3153,12 +3872,6 @@ msgstr ""
msgid "Something went wrong while fetching the registry list."
msgstr ""
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3276,12 +3989,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr ""
msgid "StarProject|Star"
msgstr ""
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3291,6 +4013,15 @@ msgstr ""
msgid "Start the Runner!"
msgstr ""
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -3303,9 +4034,15 @@ msgstr ""
msgid "Switch branch/tag"
msgstr ""
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr ""
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3388,6 +4125,9 @@ msgstr ""
msgid "Target Branch"
msgstr ""
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr ""
@@ -3403,15 +4143,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr ""
msgid "The collection of events added to the data gathered for that stage."
msgstr ""
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr ""
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr ""
@@ -3424,12 +4173,18 @@ msgstr ""
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr ""
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr ""
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr ""
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr ""
@@ -3445,6 +4200,9 @@ msgstr ""
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr ""
@@ -3481,6 +4239,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3553,6 +4314,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr ""
@@ -3565,6 +4329,12 @@ msgstr ""
msgid "Time between merge request creation and merge/close"
msgstr ""
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3726,6 +4496,36 @@ msgstr ""
msgid "Title"
msgstr ""
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
@@ -3765,18 +4565,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr ""
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3816,6 +4610,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr ""
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr ""
@@ -3825,24 +4625,51 @@ msgstr ""
msgid "Use your global notification setting"
msgstr ""
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr ""
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr ""
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr ""
@@ -3870,12 +4697,18 @@ msgstr ""
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr ""
msgid "Weight"
msgstr ""
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr ""
@@ -3996,13 +4829,19 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr ""
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
msgstr ""
msgid "You can also create a project from the command line."
@@ -4077,9 +4916,27 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4095,6 +4952,16 @@ msgstr ""
msgid "Your projects"
msgstr ""
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "assign yourself"
msgstr ""
@@ -4104,12 +4971,30 @@ msgstr ""
msgid "by"
msgstr ""
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4137,9 +5022,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4152,25 +5034,28 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
@@ -4180,15 +5065,44 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4202,9 +5116,21 @@ msgstr[3] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4217,6 +5143,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4244,18 +5173,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4340,6 +5278,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4380,6 +5321,9 @@ msgstr ""
msgid "personal access token"
msgstr ""
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4389,6 +5333,9 @@ msgstr ""
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
diff --git a/locale/pt_BR/gitlab.po b/locale/pt_BR/gitlab.po
index 277552a8d02..96a59d6d0d3 100644
--- a/locale/pt_BR/gitlab.po
+++ b/locale/pt_BR/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:20-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:36-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
@@ -17,7 +17,7 @@ msgstr ""
"X-Crowdin-File: /master/locale/gitlab.pot\n"
msgid " and"
-msgstr ""
+msgstr " e"
msgid "%d commit"
msgid_plural "%d commits"
@@ -26,13 +26,18 @@ msgstr[1] "%d commits"
msgid "%d commit behind"
msgid_plural "%d commits behind"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d commit atrás"
+msgstr[1] "%d commits atrás"
+
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] "%d exporter"
+msgstr[1] "%d exporters"
msgid "%d issue"
msgid_plural "%d issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d issue"
+msgstr[1] "%d issues"
msgid "%d layer"
msgid_plural "%d layers"
@@ -41,8 +46,13 @@ msgstr[1] "%d camadas"
msgid "%d merge request"
msgid_plural "%d merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d merge request"
+msgstr[1] "%d merge requests"
+
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] "%d métrica"
+msgstr[1] "%d métricas"
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
@@ -50,18 +60,21 @@ msgstr[0] "%s commit adicional foi omitido para prevenir problemas de performanc
msgstr[1] "%s commits adicionais foram omitidos para prevenir problemas de performance."
msgid "%{actionText} & %{openOrClose} %{noteable}"
-msgstr ""
+msgstr "%{actionText} & %{openOrClose} %{noteable}"
msgid "%{commit_author_link} authored %{commit_timeago}"
-msgstr ""
+msgstr "%{commit_author_link} fez commit à %{commit_timeago}"
msgid "%{count} participant"
msgid_plural "%{count} participants"
msgstr[0] "%{count} participante"
msgstr[1] "%{count} participantes"
+msgid "%{loadingIcon} Started"
+msgstr "%{loadingIcon} Iniciado"
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
-msgstr ""
+msgstr "%{lock_path} está bloqueado pelo usuário do GitLab %{lock_user_id}"
msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
msgstr "%{number_commits_behind} commits atrás de %{default_branch}, %{number_commits_ahead} commits à frente"
@@ -73,7 +86,7 @@ msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not re
msgstr "%{number_of_failures} de %{maximum_failures} falhas. O GitLab não tentará mais automaticamente. Redefina as informações de storage quando o problema for resolvido."
msgid "%{openOrClose} %{noteable}"
-msgstr ""
+msgstr "%{openOrClose} %{noteable}"
msgid "%{storage_name}: failed storage access attempt on host:"
msgid_plural "%{storage_name}: %{failed_attempts} failed storage access attempts:"
@@ -103,15 +116,30 @@ msgstr "1ª contribuição!"
msgid "2FA enabled"
msgstr "Autenticação de 2 passos ativada"
+msgid "Removes source branch"
+msgstr "Remover branch de origem"
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Uma coleção de gráficos sobre Integração Contínua"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr "Um novo \"branch\" será criado no seu \"fork\" e um novo merge request será iniciado."
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr "Um projeto é onde você armazena seus arquivos (repositório), planeja seu trabalho (issues), e publica sua documentação (wiki), %{among_other_things_link}."
+
+msgid "A user with write access to the source branch selected this option"
+msgstr "Um usuário com permissão de escrita no branch de origem selecionou esta opção"
+
msgid "About auto deploy"
msgstr "Sobre o deploy automático"
msgid "Abuse Reports"
msgstr "Relatórios de abuso"
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr "Tokens de acesso"
@@ -121,6 +149,9 @@ msgstr "Os acessos à storages com defeito foram temporariamente desabilitados p
msgid "Account"
msgstr "Conta"
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "Ativo"
@@ -140,73 +171,73 @@ msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Adicione o Webhooks de Grupos e GitLab Enterprise Edition."
msgid "Add Kubernetes cluster"
-msgstr ""
+msgstr "Adicionar cluster Kubernetes"
msgid "Add License"
msgstr "Adicionar Licença"
msgid "Add Readme"
-msgstr ""
+msgstr "Adicionar leia-me"
msgid "Add new directory"
msgstr "Adicionar novo diretório"
msgid "Add todo"
-msgstr ""
+msgstr "Adicionar tarefa"
msgid "AdminArea|Stop all jobs"
-msgstr ""
+msgstr "Parar todos os processos"
msgid "AdminArea|Stop all jobs?"
-msgstr ""
+msgstr "Parar todos os processos?"
msgid "AdminArea|Stop jobs"
-msgstr ""
+msgstr "Parar processos"
msgid "AdminArea|Stopping jobs failed"
-msgstr ""
+msgstr "Erro ao parar processos"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
-msgstr ""
+msgstr "Você parará todos os processos. Os processos em execução serão abruptamente interrompidos."
msgid "AdminHealthPageLink|health page"
msgstr "página de saúde"
msgid "AdminProjects|Delete"
-msgstr ""
+msgstr "Excluir"
msgid "AdminProjects|Delete Project %{projectName}?"
-msgstr ""
+msgstr "Excluir o projeto %{projectName}?"
msgid "AdminProjects|Delete project"
-msgstr ""
+msgstr "Excluir projeto"
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
-msgstr ""
+msgstr "Especifique um domínio a ser usado por padrão para os estágios de Auto Review Application e Auto Deploy de cada projeto."
msgid "AdminUsers|Block user"
-msgstr ""
+msgstr "Bloquear usuário"
msgid "AdminUsers|Delete User %{username} and contributions?"
-msgstr ""
+msgstr "Excluir o usuário %{username} e suas contribuições?"
msgid "AdminUsers|Delete User %{username}?"
-msgstr ""
+msgstr "Excluir o usuário %{username}?"
msgid "AdminUsers|Delete user"
-msgstr ""
+msgstr "Apagar usuário"
msgid "AdminUsers|Delete user and contributions"
-msgstr ""
+msgstr "Excluir o usuário e suas contribuições"
msgid "AdminUsers|To confirm, type %{projectName}"
-msgstr ""
+msgstr "Para confirmar, digite %{projectName}"
msgid "AdminUsers|To confirm, type %{username}"
-msgstr ""
+msgstr "Para confirmar, digite %{username}"
msgid "Advanced"
-msgstr ""
+msgstr "Avançado"
msgid "Advanced settings"
msgstr "Configurações avançadas"
@@ -215,14 +246,38 @@ msgid "All"
msgstr "Todos"
msgid "All changes are committed"
+msgstr "Houve commit com todas as mudanças"
+
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr "Todas as funcionalidades estão habilitadas para projetos em branco, a partir de templates ou ao importar, mas você pode desativá-los posteriormente nas configurações do projeto."
+
+msgid "Allow edits from maintainers."
+msgstr "Permitir as edições dos mantenedores."
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
msgstr ""
msgid "Allows you to add and manage Kubernetes clusters."
+msgstr "Permite adicionar e gerenciar clusters do Kubernetes."
+
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
msgstr ""
-msgid "An error occurred previewing the blob"
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr "Alternativamente, você pode usar um %{personal_access_token_link}. Quando você cria seu Token de Acesso Pessoal, você precisará selecionar o escopo do repositório, para que possamos exibir uma lista de seus repositórios públicos e privados que estão disponíveis para se conectar."
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr "Alternativamente, você pode usar um %{personal_access_token_link}. Quando você cria seu Token de Acesso Pessoal, você precisará selecionar o escopo do repositório, para que possamos exibir uma lista de seus repositórios públicos e privados que estão disponíveis para se importar."
+
+msgid "An error occurred previewing the blob"
+msgstr "Erro ao pré-visualizar o blob"
+
msgid "An error occurred when toggling the notification subscription"
msgstr "Erro ao modificar notificação de assinatura"
@@ -230,74 +285,77 @@ msgid "An error occurred when updating the issue weight"
msgstr "Um erro aconteceu ao atualizar o peso da issue"
msgid "An error occurred while adding approver"
-msgstr ""
+msgstr "Erro ao adicionar o aprovador"
msgid "An error occurred while detecting host keys"
-msgstr ""
+msgstr "Erro ao detectar a chave do host"
msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again."
-msgstr ""
+msgstr "Erro ao remover alerta. Atualize a página e tente novamente."
msgid "An error occurred while fetching markdown preview"
-msgstr ""
+msgstr "Erro ao gerar pré-visualização do markdown"
msgid "An error occurred while fetching sidebar data"
msgstr "Erro ao recuperar informações da barra lateral"
msgid "An error occurred while fetching the pipeline."
-msgstr ""
+msgstr "Erro ao recuperar informações da pipeline."
msgid "An error occurred while getting projects"
-msgstr ""
+msgstr "Erro ao recuperar projetos"
msgid "An error occurred while importing project"
-msgstr ""
+msgstr "Erro ao importar o projeto"
msgid "An error occurred while initializing path locks"
-msgstr ""
+msgstr "Erro ao iniciar o bloqueio do Path"
msgid "An error occurred while loading commits"
-msgstr ""
+msgstr "Erro ao carregar os Commits"
msgid "An error occurred while loading diff"
-msgstr ""
+msgstr "Erro ao carregar o Diff"
msgid "An error occurred while loading filenames"
-msgstr ""
+msgstr "Erro ao carregar nomes de arquivos"
msgid "An error occurred while loading the file"
-msgstr ""
+msgstr "Erro ao carregar o arquivo"
msgid "An error occurred while making the request."
-msgstr ""
+msgstr "Erro ao fazer a requisição."
msgid "An error occurred while removing approver"
-msgstr ""
+msgstr "Erro ao remover o aprovador"
msgid "An error occurred while rendering KaTeX"
-msgstr ""
+msgstr "Erro ao renderizar o KaTeX"
msgid "An error occurred while rendering preview broadcast message"
-msgstr ""
+msgstr "Erro ao renderizar pré-visualização da mensagem de transmissão"
msgid "An error occurred while retrieving calendar activity"
-msgstr ""
+msgstr "Erro ao recuperar calendário de atividades"
msgid "An error occurred while retrieving diff"
-msgstr ""
+msgstr "Erro ao recuperar o diff"
msgid "An error occurred while saving LDAP override status. Please try again."
-msgstr ""
+msgstr "Um erro ocorreu ao sobrescrever o status LDAP."
msgid "An error occurred while saving assignees"
-msgstr ""
+msgstr "Erro ao salvar assignees"
msgid "An error occurred while validating username"
-msgstr ""
+msgstr "Erro ao validar o nome de usuário"
msgid "An error occurred. Please try again."
msgstr "Ocorreu um erro. Tente novamente."
+msgid "Any Label"
+msgstr "Qualquer Label"
+
msgid "Appearance"
msgstr "Aparência"
@@ -323,7 +381,7 @@ msgid "Are you sure you want to reset the health check token?"
msgstr "Você tem certeza que quer reiniciar o token de status de saúde?"
msgid "Are you sure you want to unlock %{path_lock_path}?"
-msgstr ""
+msgstr "Tem certeza que deseja desbloquear %{path_lock_path}?"
msgid "Are you sure?"
msgstr "Você tem certeza?"
@@ -331,20 +389,32 @@ msgstr "Você tem certeza?"
msgid "Artifacts"
msgstr "Artefatos"
-msgid "Assign custom color like #FF0000"
+msgid "Assertion consumer service URL"
msgstr ""
+msgid "Assign custom color like #FF0000"
+msgstr "Coloque uma cor personalizada, como #FF0000"
+
msgid "Assign labels"
-msgstr ""
+msgstr "Atribuir labels"
msgid "Assign milestone"
-msgstr ""
+msgstr "Atribuir milestone"
msgid "Assign to"
+msgstr "Atribuir à"
+
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgstr "Responsável"
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Para anexar arquivo, arraste e solte ou %{upload_link}"
@@ -362,16 +432,19 @@ msgid "Author"
msgstr "Autor"
msgid "Authors: %{authors}"
-msgstr ""
+msgstr "Autores: %{authors}"
msgid "Auto DevOps enabled"
+msgstr "Auto DevOps ativo"
+
+msgid "Auto DevOps, runners and job artifacts"
msgstr ""
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
-msgstr ""
+msgstr "Apps de revisão e deploy automáticos precisam de um %{kubernetes} para funcionar corretamente."
msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly."
-msgstr ""
+msgstr "Apps de revisão e deploy automáticos precisam de um nome de domínio e um %{kubernetes} para funcionar corretamente."
msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
msgstr "Apps de revisão automática e Auto Deploy precisam de um nome de domínio para que funcione corretamente."
@@ -392,25 +465,31 @@ msgid "AutoDevOps|Learn more in the %{link_to_documentation}"
msgstr "Saiba mais em %{link_to_documentation}"
msgid "AutoDevOps|You can automatically build and test your application if you %{link_to_auto_devops_settings} for this project. You can automatically deploy it as well, if you %{link_to_add_kubernetes_cluster}."
-msgstr ""
+msgstr "Você pode automaticamente construir e testar sua aplicação, se você %{link_to_auto_devops_settings} para este projeto. Você pode também fazer o deploy automaticamente, se você %{link_to_add_kubernetes_cluster}."
msgid "AutoDevOps|add a Kubernetes cluster"
-msgstr ""
+msgstr "adicionar um cluster Kubernetes"
msgid "AutoDevOps|enable Auto DevOps (Beta)"
-msgstr ""
+msgstr "ativar auto DevOps (Beta)"
msgid "Available"
msgstr "Disponível"
msgid "Avatar will be removed. Are you sure?"
-msgstr ""
+msgstr "Foto de perfil será removida. Tem certeza?"
msgid "Average per day: %{average}"
+msgstr "Média diária: %{average}"
+
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
msgstr ""
msgid "Begin with the selected commit"
-msgstr ""
+msgstr "Comece com o commit selecionado"
msgid "Billing"
msgstr "Cobrança"
@@ -468,8 +547,8 @@ msgstr "por usuário"
msgid "Branch (%{branch_count})"
msgid_plural "Branches (%{branch_count})"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Branch (%{branch_count})"
+msgstr[1] "Branches (%{branch_count})"
msgid "Branch %{branch_name} was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}"
msgstr "O branch %{branch_name} foi criado. Para configurar o deploy automático, selecione um modelo de Yaml do GitLab CI e commit suas mudanças. %{link_to_autodeploy_doc}"
@@ -492,6 +571,15 @@ msgstr "Mudar de branch"
msgid "Branches"
msgstr "Branches"
+msgid "Branches|Active"
+msgstr "Ativos"
+
+msgid "Branches|Active branches"
+msgstr "Branches ativos"
+
+msgid "Branches|All"
+msgstr "Todos"
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr "Não foi possível encontrar o commit HEAD para essa branch"
@@ -537,12 +625,39 @@ msgstr "Uma vez que você confirmar e pressionar %{delete_protected_branch}, nã
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr "Somente alguém master ou dono do projeto poderá apagar branches protegidas"
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
-msgstr "Ramos protegidos podem ser gerenciados em %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr "Visão Geral"
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr "Branches protegidas podem ser gerenciadas em %{project_settings_link}."
+
+msgid "Branches|Show active branches"
+msgstr "Mostrar branches ativas"
+
+msgid "Branches|Show all branches"
+msgstr "Mostrar todas as branches"
+
+msgid "Branches|Show more active branches"
+msgstr "Mostrar as branches mais ativas"
+
+msgid "Branches|Show more stale branches"
+msgstr "Mostrar os branches obsoletos"
+
+msgid "Branches|Show overview of the branches"
+msgstr "Mostrar visão geral dos branches"
+
+msgid "Branches|Show stale branches"
+msgstr "Mostrar branches obsoletos"
msgid "Branches|Sort by"
msgstr "Ordernar por"
+msgid "Branches|Stale"
+msgstr "Obsoleto"
+
+msgid "Branches|Stale branches"
+msgstr "Branches obsoletos"
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr "O branch não pode ser atualizado automaticamente porque diverge do seu upstream."
@@ -588,14 +703,23 @@ msgstr "Acessar arquivos"
msgid "Browse files"
msgstr "Navegar pelos arquivos"
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr "por"
msgid "CI / CD"
msgstr "CI / CD"
+msgid "CI/CD"
+msgstr "CI/CD"
+
msgid "CI/CD configuration"
-msgstr ""
+msgstr "Configuração de CI/CD"
+
+msgid "CI/CD for external repo"
+msgstr "CI/CD para um repositório externo"
msgid "CICD|Jobs"
msgstr "Jobs"
@@ -603,15 +727,21 @@ msgstr "Jobs"
msgid "Cancel"
msgstr "Cancelar"
-msgid "Cancel edit"
-msgstr "Cancelar edição"
+msgid "Cannot be merged automatically"
+msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
+msgstr "Não se pode modificar um cluster Kubernetes gerenciado"
+
+msgid "Certificate fingerprint"
msgstr ""
msgid "Change Weight"
msgstr "Alterar peso"
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Pick para um branch"
@@ -625,13 +755,13 @@ msgid "ChangeTypeAction|Revert"
msgstr "Reverter"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
-msgstr ""
+msgstr "Isso criará um novo commit para reverter as mudanças existentes."
msgid "Changelog"
msgstr "Registro de mudanças"
msgid "Changes are shown as if the source revision was being merged into the target revision."
-msgstr ""
+msgstr "Mudanças serão mostradas se revisão de origem tiver sofrido merge na revisão alvo."
msgid "Charts"
msgstr "Gráficos"
@@ -640,7 +770,7 @@ msgid "Chat"
msgstr "Bate-papo"
msgid "Check interval"
-msgstr ""
+msgstr "Intervalo de verificação"
msgid "Checking %{text} availability…"
msgstr "Verificando disponibilidade de %{text}…"
@@ -655,19 +785,25 @@ msgid "Cherry-pick this merge request"
msgstr "Cherry-pick esse merge request"
msgid "Choose File ..."
-msgstr ""
+msgstr "Escolha o arquivo ..."
msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request."
-msgstr ""
+msgstr "Escolha a branch/tag (ex: %{master}) ou número do commit (ex: %{sha}) para ver o que mudou ou para criar um merge request."
msgid "Choose file..."
-msgstr ""
+msgstr "Escolha o arquivo..."
msgid "Choose which groups you wish to synchronize to this secondary node."
-msgstr ""
+msgstr "Escolha quais grupos você deseja sincronizar nesse nó secundário."
+
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr "Escolha quais repositórios você deseja se conectar e executar CI/CD pipeline."
+
+msgid "Choose which repositories you want to import."
+msgstr "Escolha quais repositórios você deseja importar."
msgid "Choose which shards you wish to synchronize to this secondary node."
-msgstr ""
+msgstr "Escolha quais shards você deseja que sincronizem com esse nó secundário."
msgid "CiStatusLabel|canceled"
msgstr "cancelado"
@@ -724,48 +860,57 @@ msgid "CiStatus|running"
msgstr "executando"
msgid "CiVariables|Input variable key"
-msgstr ""
+msgstr "Digite o nome da variável"
msgid "CiVariables|Input variable value"
-msgstr ""
+msgstr "Digite o valor da variável"
msgid "CiVariables|Remove variable row"
-msgstr ""
+msgstr "Remover a variável"
msgid "CiVariable|* (All environments)"
-msgstr ""
+msgstr "* (Todos os ambientes)"
msgid "CiVariable|All environments"
-msgstr ""
+msgstr "Todos os ambientes"
msgid "CiVariable|Create wildcard"
-msgstr ""
+msgstr "Criar um curinga"
msgid "CiVariable|Error occured while saving variables"
-msgstr ""
+msgstr "Erro ao salvar variáveis"
msgid "CiVariable|New environment"
-msgstr ""
+msgstr "Novo ambiente"
msgid "CiVariable|Protected"
-msgstr ""
+msgstr "Protegido"
msgid "CiVariable|Search environments"
-msgstr ""
+msgstr "Procurar ambientes"
msgid "CiVariable|Toggle protected"
-msgstr ""
+msgstr "Alternar proteção"
msgid "CiVariable|Validation failed"
-msgstr ""
+msgstr "Falha na validação"
msgid "CircuitBreakerApiLink|circuitbreaker api"
msgstr "interruptor da api"
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
-msgstr ""
+msgstr "Clique no botão abaixo para iniciar o processo de instalação navegando para a página do Kubernetes"
msgid "Click to expand text"
+msgstr "Cliquei pra expandir o texto"
+
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
msgstr ""
msgid "Clone repository"
@@ -775,28 +920,28 @@ msgid "Close"
msgstr "Fechar"
msgid "Closed"
-msgstr ""
+msgstr "Fechado"
msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster"
-msgstr ""
+msgstr "%{appList} foi instalado com sucesso no seu cluster Kubernetes"
msgid "ClusterIntegration|API URL"
msgstr "API URL"
msgid "ClusterIntegration|Add Kubernetes cluster"
-msgstr ""
+msgstr "Adicionar cluster Kubernetes"
msgid "ClusterIntegration|Add an existing Kubernetes cluster"
-msgstr ""
+msgstr "Adicionar um cluster Kubernetes existente"
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
-msgstr ""
+msgstr "Opções avançadas na integração deste cluster Kubernetes"
msgid "ClusterIntegration|Applications"
msgstr "Aplicações"
msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster."
-msgstr ""
+msgstr "Tem certeza de que deseja remover a integração deste cluster do Kubernetes? Isso não excluirá o seu cluster atual do Kubernetes."
msgid "ClusterIntegration|CA Certificate"
msgstr "Certificado CA"
@@ -805,10 +950,10 @@ msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Pacote de autoridade certificadora (Formato PEM)"
msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration"
-msgstr ""
+msgstr "Escolha como configurar a integração do cluster Kubernetes"
msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster."
-msgstr ""
+msgstr "Escolha qual dos ambientes do seu projeto usará este cluster Kubernetes."
msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab"
msgstr ""
@@ -867,6 +1012,9 @@ msgstr "Projeto do Google Kubernetes Engine"
msgid "ClusterIntegration|Helm Tiller"
msgstr "Helm Tiller"
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr "Ingressar"
@@ -876,6 +1024,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr "Instalar"
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr "Instalado"
@@ -894,6 +1045,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -927,6 +1081,9 @@ msgstr "Leia mais sobre %{link_to_documentation}"
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Tipo de máquina"
@@ -940,10 +1097,10 @@ msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}
msgstr ""
msgid "ClusterIntegration|More information"
-msgstr ""
+msgstr "Mais informações"
msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate"
-msgstr ""
+msgstr "Multiplos clusters Kubernetes estão disponíveis no GitLab Enterprise Edition Premium e Ultimate"
msgid "ClusterIntegration|Note:"
msgstr "Nota:"
@@ -967,7 +1124,7 @@ msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "Namespace do projeto (opcional, único)"
msgid "ClusterIntegration|Prometheus"
-msgstr ""
+msgstr "Prometheus"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
@@ -987,9 +1144,12 @@ msgstr "Solicitação para início de instalação falhou"
msgid "ClusterIntegration|Save changes"
msgstr "Salvar alterações"
-msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
+msgid "ClusterIntegration|Security"
msgstr ""
+msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
+msgstr "Veja e edite os detalhes de seus cluster Kubernates"
+
msgid "ClusterIntegration|See machine types"
msgstr "Ver tipos de máquina"
@@ -1009,11 +1169,14 @@ msgid "ClusterIntegration|Something went wrong on our end."
msgstr "Alguma coisa deu errado do nosso lado."
msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine"
-msgstr ""
+msgstr "Erro ao criar cluster Kubernetes no Google Kubernetes Engine"
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr "Algo deu errado ao instalar %{title}"
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1057,13 +1220,13 @@ msgid "ClusterIntegration|properly configured"
msgstr "configurado corretamente"
msgid "Collapse"
-msgstr ""
+msgstr "Recolher"
msgid "Comment and resolve discussion"
msgstr ""
msgid "Comment and unresolve discussion"
-msgstr ""
+msgstr "Comente e marque discussão como não resolvida"
msgid "Comments"
msgstr "Comentários"
@@ -1075,8 +1238,8 @@ msgstr[1] "Commits"
msgid "Commit (%{commit_count})"
msgid_plural "Commits (%{commit_count})"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Commit (%{commit_count})"
+msgstr[1] "Commits (%{commit_count})"
msgid "Commit Message"
msgstr "Mensagem de Commit"
@@ -1088,10 +1251,10 @@ msgid "Commit message"
msgstr "Mensagem de commit"
msgid "Commit statistics for %{ref} %{start_time} - %{end_time}"
-msgstr ""
+msgstr "Estatísticas de commits para %{ref} %{start_time} - %{end_time}"
msgid "Commit to %{branchName} branch"
-msgstr ""
+msgstr "Commit para a branch %{branchName}"
msgid "CommitBoxTitle|Commit"
msgstr "Commit"
@@ -1106,25 +1269,25 @@ msgid "Commits feed"
msgstr "Feed de commits"
msgid "Commits per day hour (UTC)"
-msgstr ""
+msgstr "Commits por hora (UTC)"
msgid "Commits per day of month"
-msgstr ""
+msgstr "Commits por dia do mês"
msgid "Commits per weekday"
-msgstr ""
+msgstr "Commits por dia da semana"
msgid "Commits|An error occurred while fetching merge requests data."
-msgstr ""
+msgstr "Erro ao recuperar dados do merge request."
msgid "Commits|Commit: %{commitText}"
-msgstr ""
+msgstr "Commit: %{commitText}"
msgid "Commits|History"
msgstr "Histórico"
msgid "Commits|No related merge requests found"
-msgstr ""
+msgstr "Nenhum merge request relacionado foi encontrado"
msgid "Committed by"
msgstr "Commit feito por"
@@ -1133,29 +1296,71 @@ msgid "Compare"
msgstr "Comparar"
msgid "Compare Git revisions"
-msgstr ""
+msgstr "Parar versões do Git"
msgid "Compare Revisions"
+msgstr "Comparar revisões"
+
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
msgstr ""
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
-msgstr ""
+msgstr "%{source_branch} e %{target_branch} são o mesmo."
msgid "CompareBranches|Compare"
-msgstr ""
+msgstr "Comparar"
msgid "CompareBranches|Source"
-msgstr ""
+msgstr "Origem"
msgid "CompareBranches|Target"
-msgstr ""
+msgstr "Alvo"
msgid "CompareBranches|There isn't anything to compare."
+msgstr "Não há nada para comparar."
+
+msgid "Confidential"
msgstr ""
msgid "Confidentiality"
+msgstr "Confidencialidade"
+
+msgid "Configure Gitaly timeouts."
msgstr ""
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr "Conectar"
+
+msgid "Connect all repositories"
+msgstr "Conectar todos repositórios"
+
+msgid "Connect repositories from GitHub"
+msgstr "Conectar repositórios do GitHub"
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr "Conectando..."
+
msgid "Container Registry"
msgstr "Container Registry"
@@ -1201,6 +1406,12 @@ msgstr "Use nomes de imagem diferentes"
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr "Com o Container Registry do Docker integrado ao Gitlab, todo projeto pode ter seu próprio espaço para guardar suas imagens."
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr "Contribuições"
+
msgid "Contribution guide"
msgstr "Guia de contribuição"
@@ -1208,7 +1419,7 @@ msgid "Contributors"
msgstr "Contribuidores"
msgid "ContributorsPage|%{startDate} – %{endDate}"
-msgstr ""
+msgstr "%{startDate} - %{endDate}"
msgid "ContributorsPage|Building repository graph."
msgstr "Gerando gráfico do repositório."
@@ -1232,40 +1443,40 @@ msgid "Copy URL to clipboard"
msgstr "Copiar URL para área de transferência"
msgid "Copy branch name to clipboard"
-msgstr ""
+msgstr "Copiar nome do branch para área de transferência"
msgid "Copy command to clipboard"
-msgstr ""
+msgstr "Copiar o comando para área de transferência"
msgid "Copy commit SHA to clipboard"
msgstr "Copiar SHA do commit para a área de transferência"
msgid "Copy reference to clipboard"
-msgstr ""
+msgstr "Copiar referência para área de transferência"
msgid "Create"
-msgstr ""
+msgstr "Criar"
msgid "Create New Directory"
msgstr "Criar Novo Diretório"
msgid "Create a new branch"
-msgstr ""
+msgstr "Criar uma nova branch"
msgid "Create a new branch and merge request"
-msgstr ""
+msgstr "Criar um novo branch e abrir merge request"
msgid "Create a personal access token on your account to pull or push via %{protocol}."
msgstr "Crie um token de acesso pessoal na sua conta para dar pull ou push via %{protocol}."
msgid "Create branch"
-msgstr ""
+msgstr "Criar a branch"
msgid "Create directory"
msgstr "Criar diretório"
-msgid "Create empty bare repository"
-msgstr "Criar repositório bruto vazio"
+msgid "Create empty repository"
+msgstr ""
msgid "Create epic"
msgstr "Criar épico"
@@ -1273,14 +1484,17 @@ msgstr "Criar épico"
msgid "Create file"
msgstr "Criar arquivo"
-msgid "Create lists from labels. Issues with that label appear in that list."
+msgid "Create group label"
msgstr ""
+msgid "Create lists from labels. Issues with that label appear in that list."
+msgstr "Criar lista a partir de labels. Issues com labels aparecem nestas listas."
+
msgid "Create merge request"
msgstr "Criar merge request"
msgid "Create merge request and branch"
-msgstr ""
+msgstr "Abrir merge request e criar branch"
msgid "Create new branch"
msgstr "Criar novo branch"
@@ -1292,11 +1506,14 @@ msgid "Create new file"
msgstr "Criar novo arquivo"
msgid "Create new label"
-msgstr ""
+msgstr "Criar nova label"
msgid "Create new..."
msgstr "Criar novo..."
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr "Fork"
@@ -1307,7 +1524,7 @@ msgid "CreateTokenToCloneLink|create a personal access token"
msgstr "criar um token de acesso pessoal"
msgid "Creates a new branch from %{branchName}"
-msgstr ""
+msgstr "Cria um novo branch de %{branchName}"
msgid "Creates a new branch from %{branchName} and re-directs to create a new merge request"
msgstr ""
@@ -1322,7 +1539,7 @@ msgid "Cron syntax"
msgstr "Sintaxe do cron"
msgid "Current node"
-msgstr ""
+msgstr "Nó atual"
msgid "Custom notification events"
msgstr "Eventos de notificação personalizados"
@@ -1330,6 +1547,9 @@ msgstr "Eventos de notificação personalizados"
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "Níveis de notificação personalizados são equivalentes a níveis de participação. Com níveis de notificação personalizados você também será notificado sobre eventos selecionados. Para mais informações, visite %{notification_link}."
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr "Análise de Ciclo"
@@ -1367,7 +1587,7 @@ msgid "December"
msgstr "Dezembro"
msgid "Default classification label"
-msgstr ""
+msgstr "Label de classificação padrão"
msgid "Define a custom pattern with cron syntax"
msgstr "Defina um padrão personalizado utilizando a sintaxe do cron"
@@ -1393,19 +1613,19 @@ msgid "Details"
msgstr "Detalhes"
msgid "Diffs|No file name available"
-msgstr ""
+msgstr "Nenhum nome de arquivo disponível"
msgid "Directory name"
msgstr "Nome do diretório"
msgid "Disable"
-msgstr ""
+msgstr "Desabilitar"
msgid "Discard draft"
-msgstr ""
+msgstr "Descartar rascunho"
msgid "Discover GitLab Geo."
-msgstr ""
+msgstr "Descubra Gitlab Geo."
msgid "Dismiss Cycle Analytics introduction box"
msgstr "Ignorar introdução do Cycle Analytics"
@@ -1413,9 +1633,15 @@ msgstr "Ignorar introdução do Cycle Analytics"
msgid "Dismiss Merge Request promotion"
msgstr "Ignorar anúncio do merge request"
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr "Não exibir novamente"
+msgid "Done"
+msgstr "Pronto"
+
msgid "Download"
msgstr "Baixar"
@@ -1443,7 +1669,13 @@ msgstr "Arquivo de texto com as mudanças"
msgid "DownloadSource|Download"
msgstr "Baixar"
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
+msgstr "Validade"
+
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
msgstr ""
msgid "Edit"
@@ -1453,15 +1685,54 @@ msgid "Edit Pipeline Schedule %{id}"
msgstr "Alterar Agendamento do Pipeline %{id}"
msgid "Edit files in the editor and commit changes here"
+msgstr "Alterar arquivos no editor e fazer commit das alterações aqui"
+
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
msgstr ""
msgid "Emails"
msgstr "Emails"
msgid "Enable"
-msgstr ""
+msgstr "Ativar"
msgid "Enable Auto DevOps"
+msgstr "Ativar Auto DevOps"
+
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
msgstr ""
msgid "Environments|An error occurred while fetching the environments."
@@ -1524,41 +1795,44 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Epics permite que você gerencie seu portfólio de projetos de forma mais eficiente e com menos esforço"
-msgid "Error checking branch data. Please try again."
+msgid "Error Reporting and Logging"
msgstr ""
+msgid "Error checking branch data. Please try again."
+msgstr "Erro ao verificar dados do branch. Favor tentar novamente."
+
msgid "Error committing changes. Please try again."
-msgstr ""
+msgstr "Erro ao realizar o commit das alterações. Favor tentar novamente."
msgid "Error creating epic"
msgstr "Erro ao criar épico"
msgid "Error fetching contributors data."
-msgstr ""
+msgstr "Erro ao recuperar informações de contribuintes."
msgid "Error fetching labels."
-msgstr ""
+msgstr "Erro ao carregar labels."
msgid "Error fetching network graph."
-msgstr ""
+msgstr "Erro ao recuperar gráfico de rede."
msgid "Error fetching refs"
-msgstr ""
+msgstr "Erro ao recuperar refs"
msgid "Error fetching usage ping data."
-msgstr ""
+msgstr "Erro ao recupera dados de ping."
msgid "Error occurred when toggling the notification subscription"
msgstr "Erro ao alterar configuração de notificação de assinatura"
msgid "Error saving label update."
-msgstr ""
+msgstr "Erro ao salvar alteração de label."
msgid "Error updating status for all todos."
-msgstr ""
+msgstr "Erro ao atualizar status para todas as tarefas."
msgid "Error updating todo status."
-msgstr ""
+msgstr "Erro ao atualizar status das tarefas."
msgid "EventFilterBy|Filter by all"
msgstr "EventFilterBy|Filtrar por tudo"
@@ -1588,7 +1862,7 @@ msgid "Every week (Sundays at 4:00am)"
msgstr "Toda semana (domingos às 4:00)"
msgid "Expand"
-msgstr ""
+msgstr "Expandir"
msgid "Explore projects"
msgstr "Explorar projetos"
@@ -1599,7 +1873,13 @@ msgstr "Explorar grupos públicos"
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
+msgstr "O acesso a este projeto foi negado para autorização externa"
+
+msgid "External authorization request timeout"
msgstr ""
msgid "ExternalAuthorizationService|Classification Label"
@@ -1611,8 +1891,11 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr "Falha"
+
msgid "Failed Jobs"
-msgstr ""
+msgstr "Jobs falharam"
msgid "Failed to change the owner"
msgstr "Erro ao alterar o proprietário"
@@ -1633,7 +1916,7 @@ msgid "February"
msgstr "Fevereiro"
msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
+msgstr "Campos nessa página não são mais editáveis, você pode configurar"
msgid "File name"
msgstr "Nome do arquivo"
@@ -1642,6 +1925,9 @@ msgid "Files"
msgstr "Arquivos"
msgid "Files (%{human_size})"
+msgstr "Arquivos (%{human_size})"
+
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
msgstr ""
msgid "Filter by commit message"
@@ -1653,12 +1939,21 @@ msgstr "Localizar por caminho"
msgid "Find file"
msgstr "Localizar arquivo"
+msgid "Finished"
+msgstr "Finalizado"
+
msgid "FirstPushedBy|First"
msgstr "Primeiro"
msgid "FirstPushedBy|pushed by"
msgstr "publicado por"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] "Fork"
@@ -1670,9 +1965,15 @@ msgstr "Fork criado a partir de"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr "Fork a partir de %{project_name} (apagado)"
+msgid "Forking in progress"
+msgstr "Fork em andamento"
+
msgid "Format"
msgstr "Formato"
+msgid "From %{provider_title}"
+msgstr "De %{provider_title}"
+
msgid "From issue creation until deploy to production"
msgstr "Da abertura de tarefas até a implantação para a produção"
@@ -1686,63 +1987,81 @@ msgid "GPG Keys"
msgstr "Chaves GPG"
msgid "Generate a default set of labels"
-msgstr ""
+msgstr "Gerar labels padrão"
msgid "Geo Nodes"
msgstr "Nós de geo"
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "Nó está falhando ou quebrado."
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr "Nó está lento, sobrecarregado, ou acabou de recuperar após uma interrupção."
-msgid "GeoNodes|Database replication lag:"
+msgid "GeoNodes|Checksummed"
msgstr ""
+msgid "GeoNodes|Database replication lag:"
+msgstr "Atraso na replicação do banco de dados:"
+
msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?"
-msgstr ""
+msgstr "Desabilitar um nó para o processo de sincronização. Você tem certeza?"
msgid "GeoNodes|Does not match the primary storage configuration"
-msgstr ""
+msgstr "Não corresponde á configuração de armazenamento primário"
msgid "GeoNodes|Failed"
-msgstr ""
+msgstr "Falha"
msgid "GeoNodes|Full"
-msgstr ""
+msgstr "Completo"
msgid "GeoNodes|GitLab version does not match the primary node version"
-msgstr ""
+msgstr "Versão do GitLab não corresponde a versão do nó primário"
msgid "GeoNodes|GitLab version:"
-msgstr ""
+msgstr "Versão do GitLab:"
msgid "GeoNodes|Health status:"
-msgstr ""
+msgstr "Saúde dos serviços:"
msgid "GeoNodes|Last event ID processed by cursor:"
-msgstr ""
+msgstr "Último ID de evento processado pelo cursor:"
msgid "GeoNodes|Last event ID seen from primary:"
-msgstr ""
+msgstr "Último ID de evento visto pelo primário:"
msgid "GeoNodes|Loading nodes"
-msgstr ""
+msgstr "Carregando nós"
msgid "GeoNodes|Local Attachments:"
-msgstr ""
+msgstr "Anexos locais:"
msgid "GeoNodes|Local LFS objects:"
-msgstr ""
+msgstr "Objetos LFS locais:"
msgid "GeoNodes|Local job artifacts:"
-msgstr ""
+msgstr "Artefatos de processos locais:"
msgid "GeoNodes|New node"
+msgstr "Novo nó"
+
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
msgstr ""
msgid "GeoNodes|Out of sync"
+msgstr "Fora de sincronia"
+
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
msgstr ""
msgid "GeoNodes|Replication slot WAL:"
@@ -1751,12 +2070,27 @@ msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1769,26 +2103,38 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
-msgid "GeoNodes|Wikis:"
+msgid "GeoNodes|Verified"
msgstr ""
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
+msgid "GeoNodes|Wikis:"
+msgstr "Wikis:"
+
msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS."
-msgstr ""
+msgstr "Você configurou Geo nodes usando uma conexão HTTP insegura. Recomendamos o uso de HTTPS."
msgid "Geo|All projects"
-msgstr ""
+msgstr "Todos os projetos"
msgid "Geo|File sync capacity"
msgstr "Capacidade de sincronização de arquivos"
msgid "Geo|Groups to synchronize"
-msgstr ""
+msgstr "Grupos para sincronizar"
msgid "Geo|Projects in certain groups"
-msgstr ""
+msgstr "Projetos em certos grupos"
msgid "Geo|Projects in certain storage shards"
msgstr ""
@@ -1802,21 +2148,42 @@ msgstr "Selecione grupos para replicar."
msgid "Geo|Shards to synchronize"
msgstr ""
-msgid "Git revision"
+msgid "Git repository URL"
msgstr ""
+msgid "Git revision"
+msgstr "Revisão do Git"
+
msgid "Git storage health information has been reset"
msgstr "Informações sobre o status de saúde do storage Git foram reiniciadas"
msgid "Git version"
+msgstr "Versão do Git"
+
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
msgstr ""
msgid "GitLab Runner section"
msgstr "Seção GitLab Runner"
-msgid "Gitaly Servers"
+msgid "GitLab single sign on URL"
msgstr ""
+msgid "Gitaly"
+msgstr ""
+
+msgid "Gitaly Servers"
+msgstr "Servidores Gitaly"
+
+msgid "Go back"
+msgstr "Voltar"
+
msgid "Go to your fork"
msgstr "Ir para seu fork"
@@ -1827,7 +2194,7 @@ msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab ad
msgstr "Autenticação do Google não está %{link_to_documentation}. Peça ao administrador do Gitlab se você deseja usar esse serviço."
msgid "Got it!"
-msgstr ""
+msgstr "Entendi!"
msgid "GroupRoadmap|Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -1883,9 +2250,6 @@ msgstr "Nenhum grupo encontrado"
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr "Você pode gerenciar permissões de membros e acesso do seu grupo para cada projeto no grupo."
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr "Criar um projeto nesse grupo."
@@ -1916,6 +2280,9 @@ msgstr "Desculpe, nenhum grupo ou projeto correspondem à sua pesquisa"
msgid "Have your users email"
msgstr "E-mail para abertura de issues"
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr "Status de Saúde"
@@ -1934,10 +2301,19 @@ msgstr "Nenhum problema de saúde detectado"
msgid "HealthCheck|Unhealthy"
msgstr "Não saudável"
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ocultar valor"
+msgstr[1] "Ocultar valores"
msgid "History"
msgstr "Histórico"
@@ -1945,12 +2321,39 @@ msgstr "Histórico"
msgid "Housekeeping successfully started"
msgstr "Manutenção iniciada com sucesso"
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr "Importar"
+
+msgid "Import all repositories"
+msgstr "Importar todos repositórios"
+
+msgid "Import in progress"
+msgstr "Importação em andamento"
+
+msgid "Import repositories from GitHub"
+msgstr "Importar repositórios do GitHub"
+
msgid "Import repository"
msgstr "Importar repositório"
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr "Melhorar issue boards com o GitLab Enterprise Edition."
@@ -1961,7 +2364,7 @@ msgid "Improve search with Advanced Global Search and GitLab Enterprise Edition.
msgstr "Encontre o que precisa mais facilmente com a pesquisa global avançada com GitLab Enterprise Edition."
msgid "Install Runner on Kubernetes"
-msgstr ""
+msgstr "Instalar Runner no Kubernates"
msgid "Install a Runner compatible with GitLab CI"
msgstr "Instalar um Runner compatível com o GitLab CI"
@@ -1972,6 +2375,9 @@ msgstr[0] "Instância"
msgstr[1] "Instâncias"
msgid "Instance does not support multiple Kubernetes clusters"
+msgstr "A instância não suporta múltiplos clusters Kubernetes"
+
+msgid "Integrations"
msgstr ""
msgid "Interested parties can even contribute by pushing commits if they want to."
@@ -2014,7 +2420,7 @@ msgid "January"
msgstr "Janeiro"
msgid "Jobs"
-msgstr ""
+msgstr "Jobs"
msgid "Jul"
msgstr "Jul"
@@ -2028,11 +2434,14 @@ msgstr "Jun"
msgid "June"
msgstr "Junho"
-msgid "Kubernetes"
+msgid "Koding"
msgstr ""
+msgid "Kubernetes"
+msgstr "Kubernetes"
+
msgid "Kubernetes Cluster"
-msgstr ""
+msgstr "Cluster Kubernetes"
msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}"
msgstr ""
@@ -2058,12 +2467,30 @@ msgstr "Desabilitado"
msgid "LFSStatus|Enabled"
msgstr "Habilitado"
+msgid "Label"
+msgstr "Label"
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr "Etiquetas"
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "Último %d dia"
@@ -2094,7 +2521,7 @@ msgid "LastPushEvent|at"
msgstr "em"
msgid "Learn more"
-msgstr ""
+msgstr "Saiba mais"
msgid "Learn more about Kubernetes"
msgstr ""
@@ -2121,22 +2548,22 @@ msgid "License"
msgstr "Licença"
msgid "List"
+msgstr "Lista"
+
+msgid "List your GitHub repositories"
msgstr ""
msgid "Loading the GitLab IDE..."
-msgstr ""
+msgstr "Carregando IDE do GitLab..."
msgid "Lock"
msgstr "Bloquear"
msgid "Lock %{issuableDisplayName}"
-msgstr ""
+msgstr "Bloquear %{issuableDisplayName}"
msgid "Lock not found"
-msgstr ""
-
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
+msgstr "Bloqueio não encontrado"
msgid "Locked"
msgstr "Bloqueado"
@@ -2153,7 +2580,19 @@ msgstr "Entrar"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
+msgstr "Gerenciar etiquetas"
+
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
msgstr ""
msgid "Mar"
@@ -2163,7 +2602,7 @@ msgid "March"
msgstr "Março"
msgid "Mark done"
-msgstr ""
+msgstr "Marcar como feito"
msgid "Maximum git storage failures"
msgstr "Máximo de falhas do git storage"
@@ -2177,6 +2616,9 @@ msgstr "Mediana"
msgid "Members"
msgstr "Membros"
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr "Merge Requests"
@@ -2187,20 +2629,92 @@ msgid "Merge request"
msgstr "Merge requests"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
-msgstr ""
-
-msgid "MergeRequest|Approved"
-msgstr ""
+msgstr "A tela de Merge request é um lugar para propor mudanças em um projeto e discutir essas mudanças com outros"
msgid "Merged"
-msgstr ""
+msgstr "Merge realizado"
msgid "Messages"
msgstr "Mensagens"
-msgid "Milestone"
+msgid "Metrics - Influx"
msgstr ""
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
+msgid "Milestone"
+msgstr "Milestone"
+
msgid "Milestones|Delete milestone"
msgstr ""
@@ -2213,6 +2727,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "adicione uma chave SSH"
@@ -2225,6 +2748,9 @@ msgstr ""
msgid "Monitoring"
msgstr "Monitoramento"
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2232,16 +2758,16 @@ msgid "More information is available|here"
msgstr "Mais informações estão disponíveis|aqui"
msgid "Move"
-msgstr ""
+msgstr "Mover"
msgid "Move issue"
-msgstr ""
+msgstr "Mover issue"
msgid "Multiple issue boards"
msgstr "Múltiplos issue boards"
msgid "Name new label"
-msgstr ""
+msgstr "Nome da nova label"
msgid "New Issue"
msgid_plural "New Issues"
@@ -2249,10 +2775,10 @@ msgstr[0] "Nova Issue"
msgstr[1] "Novas Issues"
msgid "New Kubernetes Cluster"
-msgstr ""
+msgstr "Novo cluster Kubernetes"
msgid "New Kubernetes cluster"
-msgstr ""
+msgstr "Novo cluster Kubernetes"
msgid "New Pipeline Schedule"
msgstr "Novo Agendamento de Pipeline"
@@ -2279,7 +2805,7 @@ msgid "New issue"
msgstr "Nova issue"
msgid "New label"
-msgstr ""
+msgstr "Nova label"
msgid "New merge request"
msgstr "Novo merge request"
@@ -2299,22 +2825,28 @@ msgstr "Novo subgrupo"
msgid "New tag"
msgstr "Nova tag"
-msgid "No assignee"
+msgid "No Label"
msgstr ""
+msgid "No assignee"
+msgstr "Sem responsável"
+
msgid "No changes"
-msgstr ""
+msgstr "Sem alterarções"
msgid "No connection could be made to a Gitaly Server, please check your logs!"
-msgstr ""
+msgstr "Nenhuma conexão pode ser feita para um servidor Gitaly, por favor check os logs!"
msgid "No due date"
-msgstr ""
+msgstr "Sem validade"
msgid "No estimate or time spent"
-msgstr ""
+msgstr "Sem estimativa de tempo gasto"
msgid "No file chosen"
+msgstr "Nenhum arquivo escolhido"
+
+msgid "No labels created yet."
msgstr ""
msgid "No repository"
@@ -2327,20 +2859,38 @@ msgid "None"
msgstr "Nenhum"
msgid "Not allowed to merge"
-msgstr ""
+msgstr "Merge não permitido"
msgid "Not available"
msgstr "Não disponível"
-msgid "Not confidential"
+msgid "Not available for private projects"
msgstr ""
+msgid "Not available for protected branches"
+msgstr ""
+
+msgid "Not confidential"
+msgstr "Não confidencial"
+
msgid "Not enough data"
msgstr "Dados insuficientes"
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr "Eventos de notificação"
@@ -2399,10 +2949,10 @@ msgid "Notifications"
msgstr "Notificações"
msgid "Notifications off"
-msgstr ""
+msgstr "Notificações deligadas"
msgid "Notifications on"
-msgstr ""
+msgstr "Notificações ligadas"
msgid "Nov"
msgstr "Nov"
@@ -2414,7 +2964,7 @@ msgid "Number of access attempts"
msgstr "Número de tentativas de acesso"
msgid "OK"
-msgstr ""
+msgstr "OK"
msgid "Oct"
msgstr "Out"
@@ -2425,11 +2975,17 @@ msgstr "Outubro"
msgid "OfSearchInADropdown|Filter"
msgstr "Filtrar"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr "Somente membros do projeto podem comentar."
msgid "Open"
-msgstr ""
+msgstr "Abrir"
msgid "Opened"
msgstr "Aberto"
@@ -2446,12 +3002,18 @@ msgstr "Opções"
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr "Visão geral"
msgid "Owner"
msgstr "Proprietário"
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr "Último >>"
@@ -2464,9 +3026,21 @@ msgstr "Anterior"
msgid "Pagination|« First"
msgstr "<< Primeiro"
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr "Senha"
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr "Pipeline"
@@ -2546,9 +3120,36 @@ msgid "Pipelines for last year"
msgstr "Pipelines para o último ano"
msgid "Pipelines|Build with confidence"
+msgstr "Construa com confiança"
+
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
msgstr ""
msgid "Pipelines|Get started with Pipelines"
+msgstr "Saiba como funcionam as pipelines"
+
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
msgstr ""
msgid "Pipeline|Retry pipeline"
@@ -2581,20 +3182,29 @@ msgstr "com etapa"
msgid "Pipeline|with stages"
msgstr "com etapas"
-msgid "Play"
+msgid "PlantUML"
msgstr ""
+msgid "Play"
+msgstr "Iniciar"
+
msgid "Please enable billing for one of your projects to be able to create a Kubernetes cluster, then try again."
-msgstr ""
+msgstr "Por favor, ative a cobrança para um de seus projetos para ser possível criar um cluster Kubernetes, depois tente novamente."
msgid "Please solve the reCAPTCHA"
msgstr "Por favor, resolva o reCAPTCHA"
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr "Preferências"
msgid "Primary"
-msgstr ""
+msgstr "Primário"
msgid "Private - Project access must be granted explicitly to each user."
msgstr "Privado - O acesso ao projeto deve ser concedido explicitamente para cada usuário."
@@ -2644,9 +3254,12 @@ msgstr "Sua conta é atualmente proprietária dos seguintes grupos:"
msgid "Profiles|your account"
msgstr "sua conta"
-msgid "Programming languages used in this repository"
+msgid "Profiling - Performance bar"
msgstr ""
+msgid "Programming languages used in this repository"
+msgstr "Linguagens de programação usadas nesse repositório"
+
msgid "Project '%{project_name}' is in the process of being deleted."
msgstr "O projeto '%{project_name}' está sendo excluído."
@@ -2663,13 +3276,10 @@ msgid "Project access must be granted explicitly to each user."
msgstr "Acesso ao projeto deve ser concedido explicitamente para cada usuário."
msgid "Project avatar"
-msgstr ""
+msgstr "Imagem do projeto"
msgid "Project avatar in repository: %{link}"
-msgstr ""
-
-msgid "Project cache successfully reset."
-msgstr ""
+msgstr "Imagem do projeto no repositório: %{link}"
msgid "Project details"
msgstr "Detalhes do projeto"
@@ -2690,19 +3300,19 @@ msgid "ProjectActivityRSS|Subscribe"
msgstr "Inscreva-se"
msgid "ProjectCreationLevel|Allowed to create projects"
-msgstr ""
+msgstr "Permitido a criação de projetos"
msgid "ProjectCreationLevel|Default project creation protection"
-msgstr ""
+msgstr "Proteção de criação de projeto padrão"
msgid "ProjectCreationLevel|Developers + Masters"
-msgstr ""
+msgstr "Desenvolvedores + Masters"
msgid "ProjectCreationLevel|Masters"
-msgstr ""
+msgstr "Masters"
msgid "ProjectCreationLevel|No one"
-msgstr ""
+msgstr "Ninguém"
msgid "ProjectFeature|Disabled"
msgstr "Desabilitado"
@@ -2767,6 +3377,12 @@ msgstr "Desculpe, nenhum projeto corresponde a sua pesquisa"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Esta funcionalidade necessita de suporte à localStorage do navegador"
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2779,9 +3395,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr "Por padrão, Prometheus escuta em 'http://localhost:9090'. Não é recomendado mudar o endereço padrão e sua porta, porque pode conflitar com outros serviços que estão executando no sevidor do Gitlab."
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr "Encontrando e configurando métricas..."
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2794,20 +3422,14 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr "Métricas"
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr "Métricas são automaticamente configuradas e monitoradas baseadas na biblioteca de métricas de exportadores populares."
-
msgid "PrometheusService|Missing environment variable"
msgstr "Variável de ambiente ausente"
-msgid "PrometheusService|Monitored"
-msgstr "Monitorado"
-
msgid "PrometheusService|More information"
msgstr "Mais informações"
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
-msgstr "Nenhuma métrica está sendo monitorada. Para inicar o monitoramento, faça deploy em um ambiente."
+msgid "PrometheusService|New metric"
+msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "URL da API base do Prometheus. como http://prometheus.example.com/"
@@ -2815,20 +3437,32 @@ msgstr "URL da API base do Prometheus. como http://prometheus.example.com/"
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
-msgid "PrometheusService|Time-series monitoring service"
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
msgstr ""
+msgid "PrometheusService|Time-series monitoring service"
+msgstr "Serviço de monitoramento de tempo-de-série"
+
msgid "PrometheusService|To enable manual configuration, uninstall Prometheus from your clusters"
msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
-msgstr "Ver ambientes"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
+msgstr ""
msgid "Protip:"
-msgstr ""
+msgstr "Dicas:"
msgid "Public - The group and any public projects can be viewed without any authentication."
msgstr "Público - O grupo e seus projetos podem ser visualizados por todos sem autenticação."
@@ -2852,7 +3486,7 @@ msgid "PushRule|Committer restriction"
msgstr "Restrição de commit"
msgid "Quick actions can be used in the issues description and comment boxes."
-msgstr ""
+msgstr "Ações rápidas podem ser usadas nas descrições das issues e nas caixas de comentário."
msgid "Read more"
msgstr "Leia mais"
@@ -2860,6 +3494,9 @@ msgstr "Leia mais"
msgid "Readme"
msgstr "Leia-me"
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "Branches"
@@ -2867,10 +3504,10 @@ msgid "RefSwitcher|Tags"
msgstr "Tags"
msgid "Reference:"
-msgstr ""
+msgstr "Referência:"
msgid "Register / Sign In"
-msgstr ""
+msgstr "Registrar/Login"
msgid "Registry"
msgstr "Registro"
@@ -2893,19 +3530,25 @@ msgstr "Merge Requests Relacionados"
msgid "Related Merged Requests"
msgstr "Merge Requests Relacionados"
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr "Lembrar mais tarde"
msgid "Remove"
-msgstr ""
+msgstr "Remover"
msgid "Remove avatar"
-msgstr ""
+msgstr "Remover imagem"
msgid "Remove project"
msgstr "Remover projeto"
msgid "Repair authentication"
+msgstr "Reparar autenticação"
+
+msgid "Repo by URL"
msgstr ""
msgid "Repository"
@@ -2914,6 +3557,15 @@ msgstr "Repositório"
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr "Solicitar acesso"
@@ -2929,10 +3581,13 @@ msgstr "Recriar o token de registro de runners"
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Mostrar valor"
+msgstr[1] "Mostrar valores"
msgid "Revert this commit"
msgstr "Reverter este commit"
@@ -2940,9 +3595,36 @@ msgstr "Reverter este commit"
msgid "Revert this merge request"
msgstr "Reverter esse merge request"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr "Executando"
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr "Chaves SSH"
@@ -2953,11 +3635,14 @@ msgid "Save pipeline schedule"
msgstr "Salvar agendamento da pipeline"
msgid "Save variables"
-msgstr ""
+msgstr "Salvar variáveis"
msgid "Schedule a new pipeline"
msgstr "Agendar nova pipeline"
+msgid "Scheduled"
+msgstr "Agendado"
+
msgid "Schedules"
msgstr "Agendamentos"
@@ -2967,17 +3652,20 @@ msgstr "Agendando pipelines"
msgid "Scoped issue boards"
msgstr "Issue board de escopo"
+msgid "Search"
+msgstr "Pesquisar"
+
msgid "Search branches and tags"
msgstr "Procurar branch e tags"
msgid "Search milestones"
-msgstr ""
+msgstr "Pesquisar milestones"
msgid "Search project"
-msgstr ""
+msgstr "Procurar projeto"
msgid "Search users"
-msgstr ""
+msgstr "Procurar usuários"
msgid "Seconds before reseting failure information"
msgstr "Segundos antes de redefinir as informações de falha"
@@ -2986,10 +3674,10 @@ msgid "Seconds to wait for a storage access attempt"
msgstr "Segundo de espera para tentativa de acesso ao storage"
msgid "Secret variables"
-msgstr ""
+msgstr "Variáveis secretas"
msgid "Security report"
-msgstr ""
+msgstr "Relatório de segurança"
msgid "Select Archive Format"
msgstr "Selecionar Formato do Arquivo"
@@ -3001,19 +3689,19 @@ msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
msgid "Select assignee"
-msgstr ""
+msgstr "Selecione o responsável"
msgid "Select branch/tag"
-msgstr ""
+msgstr "Selecionar o branch/tag"
msgid "Select target branch"
msgstr "Selecionar branch de destino"
msgid "Selective synchronization"
-msgstr ""
+msgstr "Sincronização seletiva"
msgid "Send email"
-msgstr ""
+msgstr "Enviar e-mail"
msgid "Sep"
msgstr "Set"
@@ -3022,7 +3710,7 @@ msgid "September"
msgstr "Setembro"
msgid "Server version"
-msgstr ""
+msgstr "Versão do servidor"
msgid "Service Templates"
msgstr "Modelos de serviço"
@@ -3030,15 +3718,33 @@ msgstr "Modelos de serviço"
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "Defina uma senha para sua conta para aceitar ou entregar código via %{protocol}."
-msgid "Set up CI/CD"
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
msgstr ""
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
+msgid "Set up CI/CD"
+msgstr "Configurar CI/CD"
+
msgid "Set up Koding"
msgstr "Configurar Koding"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "defina uma senha"
@@ -3048,6 +3754,9 @@ msgstr "Configurações"
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3083,6 +3792,18 @@ msgstr "Nenhum"
msgid "Sidebar|Weight"
msgstr "Peso"
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr "Snippets"
@@ -3090,18 +3811,12 @@ msgid "Something went wrong on our end"
msgstr ""
msgid "Something went wrong on our end."
-msgstr "Algo deu errado do nosso lado."
-
-msgid "Something went wrong trying to change the confidentiality of this issue"
msgstr ""
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr "Algo deu errado ao tentar mudar o estado de ${this.issuableDisplayName}"
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3113,14 +3828,8 @@ msgstr "Algo deu errado ao recuperar os projetos."
msgid "Something went wrong while fetching the registry list."
msgstr "Algo deu errado ao recuperar a lista de registro."
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
-msgstr ""
+msgstr "Algo deu errado. Por favor, tente novamente."
msgid "Sort by"
msgstr "Ordenar por"
@@ -3225,7 +3934,7 @@ msgid "Source"
msgstr "Origem"
msgid "Source (branch or tag)"
-msgstr ""
+msgstr "Fonte (branch or tag)"
msgid "Source code"
msgstr "Código-fonte"
@@ -3236,12 +3945,21 @@ msgstr "Origem não está disponível"
msgid "Spam Logs"
msgstr "Logs de spam"
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr "Especifique a seguinte URL durante a configuração do Runner:"
msgid "StarProject|Star"
msgstr "Marcar"
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr "Projetos favoritos"
@@ -3251,11 +3969,20 @@ msgstr "Iniciar um %{new_merge_request} a partir dessas alterações"
msgid "Start the Runner!"
msgstr "Inicie o Runner!"
+msgid "Started"
+msgstr "Iniciado"
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr "Status"
+
msgid "Stopped"
msgstr "Parado"
msgid "Storage"
-msgstr ""
+msgstr "Armazenamento"
msgid "Subgroups"
msgstr "Subgrupos"
@@ -3263,13 +3990,19 @@ msgstr "Subgrupos"
msgid "Switch branch/tag"
msgstr "Trocar branch/tag"
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr "Hooks do sistema"
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tag (%{tag_count})"
+msgstr[1] "Tags (%{tag_count})"
msgid "Tags"
msgstr "Tags"
@@ -3346,6 +4079,9 @@ msgstr "protegido"
msgid "Target Branch"
msgstr "Branch de destino"
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr "Equipe"
@@ -3356,9 +4092,12 @@ msgid "The Advanced Global Search in GitLab is a powerful search service that sa
msgstr "A pesquisa global avançada no GitLab é um serviço de pesquisa poderoso que economiza seu tempo. Ao invés de criar códigos duplicados e perder seu tempo, você pode agora pesquisar códigos de outros times que podem ajudar em seu projeto."
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project"
-msgstr ""
+msgstr "Issue Tracker é o lugar para adicionar coisas que precisam ser melhoradas ou resolvidas em um projeto"
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
+msgstr "Issue Tracker é o lugar para adicionar coisas que precisam ser melhoradas ou resolvidas em um projeto. Você precisa se registrar ou fazer login para criar alguma Issue para este projeto."
+
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
msgstr ""
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
@@ -3367,9 +4106,15 @@ msgstr "A etapa de codificação mostra o tempo desde a entrega do primeiro comm
msgid "The collection of events added to the data gathered for that stage."
msgstr "A coleção de eventos adicionados aos dados coletados para essa etapa."
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr "O relacionamento como fork foi removido."
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "A etapa de planejamento mostra o tempo que se leva desde a criação de uma issue até sua atribuição à um milestone, ou sua adição a uma lista no seu Issue Board. Comece a criar issues para ver dados para esta etapa."
@@ -3382,12 +4127,18 @@ msgstr "O número de tentativas que gitlab fará para acessar um storage."
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr "O número de falhas para que o GitLab desabilite o acesso ao storage. O número de falhas pode ser redefinido na interface do administrador: %{link_to_health_page} ou %{api_documentation_link}."
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr "A fase do ciclo de vida do desenvolvimento."
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr "A etapa de planejamento mostra o tempo do passo anterior até a publicação de seu primeiro conjunto de mudanças. Este tempo será adicionado automaticamente assim que você enviar seu primeiro conjunto de mudanças."
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr "A etapa de produção mostra o tempo total que leva entre criar uma issue e implantar o código em produção. Os dados serão adicionados automaticamente assim que você completar todo o ciclo de produção."
@@ -3403,6 +4154,9 @@ msgstr "Não existe repositório para este projeto."
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "A etapa de revisão mostra o tempo de criação de uma solicitação de incorporação até sua aceitação. Os dados serão automaticamente adicionados depois que sua primeira solicitação de incorporação for aceita."
@@ -3431,37 +4185,40 @@ msgid "The value lying at the midpoint of a series of observed values. E.g., bet
msgstr "O valor situado no ponto médio de uma série de valores observados. Ex., entre 3, 5, 9, a mediana é 5. Entre 3, 5, 7, 8, a mediana é (5+7)/2 = 6."
msgid "There are no issues to show"
-msgstr ""
+msgstr "Não há issues para mostrar"
msgid "There are no merge requests to show"
-msgstr ""
+msgstr "Não há merge requests pra mostrar"
msgid "There are problems accessing Git storage: "
msgstr "Há problemas para acessar o storage Git: "
-msgid "There was an error loading users activity calendar."
+msgid "There was an error loading results"
msgstr ""
+msgid "There was an error loading users activity calendar."
+msgstr "Erro ao carregar calendário de atividades."
+
msgid "There was an error saving your notification settings."
-msgstr ""
+msgstr "Erro ao salvar suas configurações de notificação."
msgid "There was an error subscribing to this label."
-msgstr ""
+msgstr "Erro ao se inscrever nessa label."
msgid "There was an error when reseting email token."
-msgstr ""
+msgstr "Erro ao redefinir token do email."
msgid "There was an error when subscribing to this label."
-msgstr ""
+msgstr "Erro ao se inscrever nessa label."
msgid "There was an error when unsubscribing from this label."
-msgstr ""
+msgstr "Erro ao se anular a inscrição dessa label."
msgid "This board\\'s scope is reduced"
msgstr "O escopo desse board está reduzido"
msgid "This directory"
-msgstr ""
+msgstr "Esse diretório"
msgid "This is a confidential issue."
msgstr "Essa issue é confidencial."
@@ -3470,7 +4227,7 @@ msgid "This is the author's first Merge Request to this project."
msgstr "Esse é o autor do primeiro merge request desse projeto."
msgid "This issue is confidential"
-msgstr ""
+msgstr "Essa issue é confidencial"
msgid "This issue is confidential and locked."
msgstr "Essa issue é confidencial e está bloqueada."
@@ -3488,13 +4245,13 @@ msgid "This job has not been triggered yet"
msgstr ""
msgid "This job has not started yet"
-msgstr ""
+msgstr "Esse processo ainda não começou"
msgid "This job is in pending state and is waiting to be picked by a runner"
msgstr ""
msgid "This job requires a manual action"
-msgstr ""
+msgstr "Este Job exige uma ação manual"
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Isto significa que você não pode entregar código até que crie um repositório vazio ou importe um existente."
@@ -3503,13 +4260,16 @@ msgid "This merge request is locked."
msgstr "Esse merge request está bloqueado."
msgid "This page is unavailable because you are not allowed to read information across multiple projects."
-msgstr ""
+msgstr "Esta página não está disponível porque você não tem permissão para ler informações de vários projetos."
msgid "This project"
-msgstr ""
+msgstr "Esse projeto"
msgid "This repository"
-msgstr ""
+msgstr "Esse repositório"
+
+msgid "This will delete the custom metric, Are you sure?"
+msgstr "Esta ação excluirá uma métrica personalizada, você tem certeza?"
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr "Esses e-mails se tornarão issues automaticamente (com os comentários se tornando uma conversa de e-mail) listadas aqui."
@@ -3523,6 +4283,12 @@ msgstr "Tempo até que uma issue comece a ser implementado"
msgid "Time between merge request creation and merge/close"
msgstr "Tempo entre a criação da solicitação de incorporação e a aceitação/fechamento"
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3680,20 +4446,50 @@ msgstr ""
msgid "Title"
msgstr "Título"
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
msgid "Todo"
-msgstr ""
+msgstr "Pendente"
msgid "Toggle sidebar"
-msgstr ""
+msgstr "Ativar/Desativar barra lateral"
msgid "ToggleButton|Toggle Status: OFF"
-msgstr ""
+msgstr "Mudar Status: Desligado"
msgid "ToggleButton|Toggle Status: ON"
-msgstr ""
+msgstr "Mudar Status: Ligado"
msgid "Total Time"
msgstr "Tempo Total"
@@ -3702,7 +4498,7 @@ msgid "Total test time for all commits/merges"
msgstr "Tempo de teste total para todos os commits/merges"
msgid "Total: %{total}"
-msgstr ""
+msgstr "Total: %{total}"
msgid "Track activity with Contribution Analytics."
msgstr "Acompanhe a atividade com o Contribution Analytics."
@@ -3719,18 +4515,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr "Ativar Service Desk"
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
-msgstr ""
+msgstr "Desconhecido"
msgid "Unlock"
msgstr "Desbloquear"
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr "Desbloqueado"
@@ -3741,7 +4531,7 @@ msgid "Unstar"
msgstr "Desmarcar"
msgid "Up to date"
-msgstr ""
+msgstr "Atualizado"
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "Atualize seu plano para ativar a Pesquisa Global Avançada."
@@ -3765,11 +4555,17 @@ msgid "Upload file"
msgstr "Enviar arquivo"
msgid "Upload new avatar"
-msgstr ""
+msgstr "Fazer upload de nova imagem"
msgid "UploadLink|click to upload"
msgstr "clique para fazer upload"
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr "Use o Service Desk para se conectar com seus usuários (por exemplo, para oferecer suporte ao cliente) por email dentro do GitLab"
@@ -3779,24 +4575,51 @@ msgstr "Use o seguinte token de registro durante a configuração:"
msgid "Use your global notification setting"
msgstr "Utilizar configuração de notificação global"
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr "Ver arquivo @ "
-msgid "View labels"
+msgid "View group labels"
msgstr ""
+msgid "View labels"
+msgstr "Visualizar etiquetas"
+
msgid "View open merge request"
msgstr "Ver merge request aberto"
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr "Ver arquivo substituído @ "
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Interno"
@@ -3813,7 +4636,7 @@ msgid "Want to see the data? Please ask an administrator for access."
msgstr "Precisa visualizar os dados? Solicite acesso ao administrador."
msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again."
-msgstr ""
+msgstr "Não foi possível verificar se um dos seus projetos no GCP possui o faturamento ativado. Por favor, tente novamente."
msgid "We don't have enough data to show this stage."
msgstr "Esta etapa não possui dados suficientes para exibição."
@@ -3824,12 +4647,18 @@ msgstr "Queremos ter certeza de que é você, confirme que você não é um rob
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr "Webhooks permitem que você acione uma URL se, por exemplo, quando um novo código for feito push ou uma nova issue criada. Você pode configurar os webhooks para escutar eventos específicos como push, issue ou merge request. Webhooks de grupo aplicarão para todos os projetos no grupo, permitindo você padronizar o funcionamento em todo o grupo."
msgid "Weight"
msgstr "Peso"
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr "Wiki"
@@ -3945,37 +4774,43 @@ msgid "Withdraw Access Request"
msgstr "Remover Requisição de Acesso"
msgid "Write a commit message..."
-msgstr ""
+msgstr "Escrever uma mensagem de commit..."
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "Você vai remover %{group_name}. Grupos removidos NÃO PODEM ser restaurados! Você está ABSOLUTAMENTE certo?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "Você irá remover %{project_name_with_namespace}. O projeto removido NÃO PODE ser restaurado! Tem certeza ABSOLUTA?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr "Você irá remover %{project_full_name}. O projeto removido NÃO PODE ser restaurado! Tem certeza ABSOLUTA?"
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "Você está prestes a remover a relação de fork do projeto original %{forked_from_project}. Você tem CERTEZA disso?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "Você irá transferir %{project_name_with_namespace} para outro proprietário. Tem certeza ABSOLUTA?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr "Você irá transferir %{project_full_name} para outro proprietário. Tem certeza ABSOLUTA?"
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr ""
msgid "You can also create a project from the command line."
-msgstr ""
+msgstr "Você também pode criar um projeto a partir da linha de comando."
msgid "You can also star a label to make it a priority label."
-msgstr ""
+msgstr "Você também pode marcar uma label para torná-la uma label de prioridade."
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
-msgstr ""
+msgstr "Você pode instalar facilmente um Runner em um cluster Kubernetes. %{link_to_help_page}"
msgid "You can move around the graph by using the arrow keys."
-msgstr ""
+msgstr "Você pode mover o gráfico usando as setas do teclado."
msgid "You can only add files when you are on a branch"
msgstr "Você somente pode adicionar arquivos quando estiver em um branch"
msgid "You can only edit files when you are on a branch"
-msgstr ""
+msgstr "Você só pode editar arquivos quando estiver em um branch"
msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead."
msgstr "Você não pode escrever numa instância secundária de somente leitura do GitLab Geo. Por favor use %{link_to_primary_node}."
@@ -3987,13 +4822,13 @@ msgid "You do not have the correct permissions to override the settings from the
msgstr ""
msgid "You have no permissions"
-msgstr ""
+msgstr "Você não tem permissão"
msgid "You have reached your project limit"
msgstr "Você atingiu o limite de seu projeto"
msgid "You must have master access to force delete a lock"
-msgstr ""
+msgstr "Você deve ter o acesso master para apagar um bloqueio"
msgid "You must sign in to star a project"
msgstr "Você deve estar autenticado para marcar um projeto"
@@ -4029,14 +4864,32 @@ msgid "You won't be able to pull or push project code via SSH until you add an S
msgstr "Você não poderá fazer push ou pull do código via SSH enquanto não adicionar sua chave SSH no seu perfil"
msgid "You'll need to use different branch names to get a valid comparison."
+msgstr "Você precisará usar nomes de branch diferentes para obter uma comparação válida."
+
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
msgstr ""
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
-msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
+msgid "Your Projects (default)"
msgstr ""
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
+msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
+msgstr "Commit com suas alterações realizado. Commit %{commitId} %{commitStats}"
+
msgid "Your comment will not be visible to the public."
msgstr "Seu comentário não estará visível ao público."
@@ -4049,21 +4902,47 @@ msgstr "Seu nome"
msgid "Your projects"
msgstr "Seus projetos"
-msgid "assign yourself"
+msgid "among other things"
msgstr ""
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "assign yourself"
+msgstr "atribuir a si mesmo"
+
msgid "branch name"
msgstr "nome da branch"
msgid "by"
msgstr "por"
-msgid "ciReport|Code quality"
+msgid "ciReport|%{type} detected no new security vulnerabilities"
msgstr ""
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Code quality"
+msgstr "Qualidade de código"
+
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4091,9 +4970,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4106,25 +4982,28 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
-msgstr "commit"
-
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
@@ -4132,15 +5011,40 @@ msgid_plural "days"
msgstr[0] "dia"
msgstr[1] "dias"
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4152,9 +5056,21 @@ msgstr[1] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4167,6 +5083,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4194,18 +5113,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4290,6 +5218,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4315,7 +5246,7 @@ msgid "notification emails"
msgstr "emails de notificação"
msgid "or"
-msgstr ""
+msgstr "ou"
msgid "parent"
msgid_plural "parents"
@@ -4328,13 +5259,19 @@ msgstr "senha"
msgid "personal access token"
msgstr "token de acesso pessoal"
-msgid "remove due date"
+msgid "private key does not match certificate."
msgstr ""
+msgid "remove due date"
+msgstr "remover a data de vencimento"
+
msgid "source"
msgstr "origem"
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
+msgstr "%{slash_command} irá atualizar a soma do tempo gasto."
+
+msgid "this document"
msgstr ""
msgid "to help your contributors communicate effectively!"
diff --git a/locale/ru/gitlab.po b/locale/ru/gitlab.po
index 6214460fc21..a5e145a06ed 100644
--- a/locale/ru/gitlab.po
+++ b/locale/ru/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:53-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:35-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
@@ -17,7 +17,7 @@ msgstr ""
"X-Crowdin-File: /master/locale/gitlab.pot\n"
msgid " and"
-msgstr ""
+msgstr " и"
msgid "%d commit"
msgid_plural "%d commits"
@@ -33,6 +33,13 @@ msgstr[1] "на %d коммита позади"
msgstr[2] "на %d коммитов позади"
msgstr[3] "на %d коммитов позади"
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d обсуждение"
@@ -54,6 +61,13 @@ msgstr[1] "%d запроса на слияние"
msgstr[2] "%d запросов на слияние"
msgstr[3] "%d запросов на слияние"
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] "%s дополнительный коммит был пропущен для предотвращения проблем с производительностью."
@@ -74,9 +88,12 @@ msgstr[1] "%{count} участника"
msgstr[2] "%{count} участников"
msgstr[3] "%{count} участников"
-msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
+msgid "%{loadingIcon} Started"
msgstr ""
+msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
+msgstr "%{lock_path} заблокирован пользователем GitLab %{lock_user_id}"
+
msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
msgstr "на %{number_commits_behind} коммитов позади %{default_branch}, на %{number_commits_ahead} коммитов впереди"
@@ -121,15 +138,30 @@ msgstr "Первый вклад!"
msgid "2FA enabled"
msgstr "Двухфакторная авторизация включена"
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Графики непрерывной интеграции (CI)"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr "Об автоматическом развёртывании"
msgid "Abuse Reports"
msgstr "Отчёты о Жалобах"
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr "Токены Доступа"
@@ -139,6 +171,9 @@ msgstr "Доступ к вышедшим из строя хранилищам в
msgid "Account"
msgstr "Учетная запись"
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "Активный"
@@ -158,19 +193,19 @@ msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Добавить групповые веб-обработчики и GitLab Enterprise Edition."
msgid "Add Kubernetes cluster"
-msgstr ""
+msgstr "Добавить Kubernetes кластер"
msgid "Add License"
msgstr "Добавить Лицензию"
msgid "Add Readme"
-msgstr ""
+msgstr "Добавить Информацию"
msgid "Add new directory"
msgstr "Добавить новый каталог"
msgid "Add todo"
-msgstr ""
+msgstr "Добавить todo"
msgid "AdminArea|Stop all jobs"
msgstr "Остановить все задания"
@@ -200,7 +235,7 @@ msgid "AdminProjects|Delete project"
msgstr "Удалить проект"
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
-msgstr ""
+msgstr "Укажите домен, который будет использоваться по умолчанию для всех проектов в Auto Review приложениях и стадиях Auto Deploy."
msgid "AdminUsers|Block user"
msgstr "Заблокировать пользователя"
@@ -224,7 +259,7 @@ msgid "AdminUsers|To confirm, type %{username}"
msgstr "Для подтверждения, введите %{username}"
msgid "Advanced"
-msgstr ""
+msgstr "Дополнительно"
msgid "Advanced settings"
msgstr "Расширенные настройки"
@@ -233,9 +268,33 @@ msgid "All"
msgstr "Все"
msgid "All changes are committed"
+msgstr "Все изменения зафиксированы"
+
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
msgstr ""
msgid "Allows you to add and manage Kubernetes clusters."
+msgstr "Позволяет добавлять и управлять кластерами Kubernetes."
+
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
msgstr ""
msgid "An error occurred previewing the blob"
@@ -316,6 +375,9 @@ msgstr "Произошла ошибка при проверке имени по
msgid "An error occurred. Please try again."
msgstr "Произошла ошибка. Пожалуйста, попробуйте снова."
+msgid "Any Label"
+msgstr "Любая Метка"
+
msgid "Appearance"
msgstr "Оформление"
@@ -341,7 +403,7 @@ msgid "Are you sure you want to reset the health check token?"
msgstr "Вы уверены, что хотите сбросить этот токен проверки работоспособности?"
msgid "Are you sure you want to unlock %{path_lock_path}?"
-msgstr ""
+msgstr "Вы действительно хотите разблокировать %{path_lock_path}?"
msgid "Are you sure?"
msgstr "Вы уверены?"
@@ -349,16 +411,28 @@ msgstr "Вы уверены?"
msgid "Artifacts"
msgstr "Артефакты"
-msgid "Assign custom color like #FF0000"
+msgid "Assertion consumer service URL"
msgstr ""
+msgid "Assign custom color like #FF0000"
+msgstr "Назначьте пользовательский цвет, например #FF0000"
+
msgid "Assign labels"
-msgstr ""
+msgstr "Назначить метки"
msgid "Assign milestone"
-msgstr ""
+msgstr "Назначить этап"
msgid "Assign to"
+msgstr "Назначить"
+
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
msgstr ""
msgid "Assignee"
@@ -380,16 +454,19 @@ msgid "Author"
msgstr "Автор"
msgid "Authors: %{authors}"
-msgstr ""
+msgstr "Авторы: %{authors}"
msgid "Auto DevOps enabled"
+msgstr "Auto DevOps включен"
+
+msgid "Auto DevOps, runners and job artifacts"
msgstr ""
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
-msgstr ""
+msgstr "Приложения для автоматического ревью и автоматического развёртывания требуют указания %{kubernetes} для корректной работы."
msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly."
-msgstr ""
+msgstr "Приложения для автоматического ревью и автоматического развёртывания требуют указания имени домена и %{kubernetes} для корректной работы."
msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
msgstr "Приложения для автоматического ревью и автоматического развёртывания требуют указания имени домена для корректной работы."
@@ -410,25 +487,31 @@ msgid "AutoDevOps|Learn more in the %{link_to_documentation}"
msgstr "Подробнее по ссылке %{link_to_documentation}"
msgid "AutoDevOps|You can automatically build and test your application if you %{link_to_auto_devops_settings} for this project. You can automatically deploy it as well, if you %{link_to_add_kubernetes_cluster}."
-msgstr ""
+msgstr "Вы можете автоматически собирать и тестировать свое приложение, если для этого проекта %{link_to_auto_devops_settings}. Вы также можете автоматически развернуть свое приложение, если вы %{link_to_add_kubernetes_cluster}."
msgid "AutoDevOps|add a Kubernetes cluster"
-msgstr ""
+msgstr "добавите кластер Kubernetes"
msgid "AutoDevOps|enable Auto DevOps (Beta)"
-msgstr ""
+msgstr "включен Auto DevOps (Beta)"
msgid "Available"
msgstr "Доступен"
msgid "Avatar will be removed. Are you sure?"
-msgstr ""
+msgstr "Аватар будет удален. Вы уверены?"
msgid "Average per day: %{average}"
+msgstr "В среднем за день: %{average}"
+
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
msgstr ""
msgid "Begin with the selected commit"
-msgstr ""
+msgstr "Начать с выбранного коммита"
msgid "Billing"
msgstr "Тариф"
@@ -512,6 +595,15 @@ msgstr "Переключить ветку"
msgid "Branches"
msgstr "Ветки"
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr "Невозможно найти HEAD-коммит этой ветки"
@@ -534,7 +626,7 @@ msgid "Branches|Delete protected branch '%{branch_name}'?"
msgstr "Удалить защищённую ветку '%{branch_name}'?"
msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
-msgstr "Уделение ветки '%{branch_name}' невозможно отменить. Вы уверены?"
+msgstr "Удаление ветки '%{branch_name}' невозможно отменить. Вы уверены?"
msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
msgstr "Удаление влитых веток невозможно отменить. Вы уверены?"
@@ -557,12 +649,39 @@ msgstr "Как только вы подтвердите и нажмёте %{dele
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr "Только мастер или владелец проекта может удалить защищённую ветку"
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
-msgstr "Управление защищёнными ветками возможно в %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
+msgstr ""
msgid "Branches|Sort by"
msgstr "Сортировать по"
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr "Ветвь не может быть обновлена автоматически, потому что она имеет расхождения с родительским репозиторием."
@@ -608,14 +727,23 @@ msgstr "Просмотр файлов"
msgid "Browse files"
msgstr "Просмотр файлов"
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr "по автору"
msgid "CI / CD"
msgstr "CI / CD"
+msgid "CI/CD"
+msgstr "CI/CD"
+
msgid "CI/CD configuration"
-msgstr ""
+msgstr "Конфигурация CI/CD"
+
+msgid "CI/CD for external repo"
+msgstr "CI/CD для внешнего репозитория"
msgid "CICD|Jobs"
msgstr "Задания"
@@ -623,15 +751,21 @@ msgstr "Задания"
msgid "Cancel"
msgstr "Отмена"
-msgid "Cancel edit"
-msgstr "Отменить редактирование"
+msgid "Cannot be merged automatically"
+msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
+msgstr "Невозможно изменить управляемый кластер Kubernetes"
+
+msgid "Certificate fingerprint"
msgstr ""
msgid "Change Weight"
msgstr "Изменить Вес"
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Выбрать в ветке"
@@ -645,7 +779,7 @@ msgid "ChangeTypeAction|Revert"
msgstr "Отменить"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
-msgstr ""
+msgstr "Это создаст новый коммит для того, чтобы откатить существующие изменения."
msgid "Changelog"
msgstr "Журнал изменений"
@@ -660,7 +794,7 @@ msgid "Chat"
msgstr "Чат"
msgid "Check interval"
-msgstr ""
+msgstr "Интервал проверки"
msgid "Checking %{text} availability…"
msgstr "Проверка доступности %{text} ..."
@@ -675,15 +809,21 @@ msgid "Cherry-pick this merge request"
msgstr "Подобрать этот запрос на слияние"
msgid "Choose File ..."
-msgstr ""
+msgstr "Выберите Файл..."
msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request."
-msgstr ""
+msgstr "Выберите ветку/тег (например, %{master}) или введите коммит(например, %{sha}), чтобы увидеть, что изменилось или создать запрос на слияние."
msgid "Choose file..."
-msgstr ""
+msgstr "Выберите файл..."
msgid "Choose which groups you wish to synchronize to this secondary node."
+msgstr "Выберите группы, которые вы хотите синхронизировать с этим вторичным узлом."
+
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
@@ -744,48 +884,57 @@ msgid "CiStatus|running"
msgstr "выполняется"
msgid "CiVariables|Input variable key"
-msgstr ""
+msgstr "Ключ входной переменной"
msgid "CiVariables|Input variable value"
-msgstr ""
+msgstr "Значение входной переменной"
msgid "CiVariables|Remove variable row"
-msgstr ""
+msgstr "Удалить строку переменных"
msgid "CiVariable|* (All environments)"
-msgstr ""
+msgstr " * (Все среды)"
msgid "CiVariable|All environments"
-msgstr ""
+msgstr "Все среды"
msgid "CiVariable|Create wildcard"
-msgstr ""
+msgstr "Создать шаблон"
msgid "CiVariable|Error occured while saving variables"
-msgstr ""
+msgstr "Произошла ошибка при сохранении переменных"
msgid "CiVariable|New environment"
-msgstr ""
+msgstr "Новая среда"
msgid "CiVariable|Protected"
-msgstr ""
+msgstr "Защищено"
msgid "CiVariable|Search environments"
-msgstr ""
+msgstr "Поиск сред"
msgid "CiVariable|Toggle protected"
-msgstr ""
+msgstr "Включить защиту"
msgid "CiVariable|Validation failed"
-msgstr ""
+msgstr "Проверка не удалась"
msgid "CircuitBreakerApiLink|circuitbreaker api"
msgstr "CircuitBreaker API"
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
-msgstr ""
+msgstr "Нажмите кнопку ниже, чтобы начать процесс установки, перейдя на страницу Kubernetes"
msgid "Click to expand text"
+msgstr "Нажмите, чтобы раскрыть текст"
+
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
msgstr ""
msgid "Clone repository"
@@ -795,28 +944,28 @@ msgid "Close"
msgstr "Закрыть"
msgid "Closed"
-msgstr ""
+msgstr "Закрыто"
msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster"
-msgstr ""
+msgstr "%{appList} успешно установлены на вашем кластере Kubernetes"
msgid "ClusterIntegration|API URL"
msgstr "Адрес API"
msgid "ClusterIntegration|Add Kubernetes cluster"
-msgstr ""
+msgstr "Добавить кластер Kubernetes"
msgid "ClusterIntegration|Add an existing Kubernetes cluster"
-msgstr ""
+msgstr "Добавить существующий кластер Kubernetes"
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
-msgstr ""
+msgstr "Дополнительные опции для этой интеграции с кластером Kubernetes"
msgid "ClusterIntegration|Applications"
msgstr "Приложения"
msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster."
-msgstr ""
+msgstr "Вы уверены, что хотите удалить интеграцию с этим кластером Kubernetes? Это не приведет к удалению вашего кластера Kubernetes."
msgid "ClusterIntegration|CA Certificate"
msgstr "Сертификат удостоверяющего центра"
@@ -825,13 +974,13 @@ msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Комплект сертификатов удостоверяющего центра (формат PEM)"
msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration"
-msgstr ""
+msgstr "Выберите способ настройки интеграции с кластером Kubernetes"
msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster."
-msgstr ""
+msgstr "Выберите, какие среды вашего проекта будут использовать этот кластер Kubernetes."
msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab"
-msgstr ""
+msgstr "Управляйте тем, как ваш кластер Kubernetes интегрируется с GitLab"
msgid "ClusterIntegration|Copy API URL"
msgstr "Скопировать адрес API"
@@ -840,22 +989,22 @@ msgid "ClusterIntegration|Copy CA Certificate"
msgstr "Копировать Сертификат Удостоверяющего Центра"
msgid "ClusterIntegration|Copy Ingress IP Address to clipboard"
-msgstr ""
+msgstr "Скопировать IP-адрес Ingress в буфер обмена"
msgid "ClusterIntegration|Copy Kubernetes cluster name"
-msgstr ""
+msgstr "Скопировать имя кластера Kubernetes"
msgid "ClusterIntegration|Copy Token"
msgstr "Скопировать Токен"
msgid "ClusterIntegration|Create Kubernetes cluster"
-msgstr ""
+msgstr "Создать кластер Kubernetes"
msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine"
-msgstr ""
+msgstr "Создать кластер при помощи Google Kubernetes Engine"
msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab"
-msgstr ""
+msgstr "Создайте новый кластер Kubernetes в Google Kubernetes Engine прямо из GitLab"
msgid "ClusterIntegration|Create on GKE"
msgstr "Создать в GKE"
@@ -864,13 +1013,13 @@ msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster"
msgstr "Укажите параметры существующего кластера Kubernetes"
msgid "ClusterIntegration|Enter the details for your Kubernetes cluster"
-msgstr ""
+msgstr "Введите сведения о вашем кластере Kubernetes"
msgid "ClusterIntegration|Environment scope"
msgstr ""
msgid "ClusterIntegration|GitLab Integration"
-msgstr ""
+msgstr "Интеграция с GitLab"
msgid "ClusterIntegration|GitLab Runner"
msgstr "GitLab Runner"
@@ -887,15 +1036,21 @@ msgstr "Проект Google Kubernetes Engine"
msgid "ClusterIntegration|Helm Tiller"
msgstr "Helm Tiller"
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr "Ingress"
msgid "ClusterIntegration|Ingress IP Address"
-msgstr ""
+msgstr "IP-адрес Ingress"
msgid "ClusterIntegration|Install"
msgstr "Установить"
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr "Установлен"
@@ -903,48 +1058,54 @@ msgid "ClusterIntegration|Installing"
msgstr "Установка"
msgid "ClusterIntegration|Integrate Kubernetes cluster automation"
-msgstr ""
+msgstr "Интеграция автоматизации кластеров Kubernetes"
msgid "ClusterIntegration|Integration status"
-msgstr ""
+msgstr " Статус интеграции"
msgid "ClusterIntegration|Kubernetes cluster"
-msgstr ""
+msgstr "Кластер Kubernetes"
msgid "ClusterIntegration|Kubernetes cluster details"
+msgstr "Сведения о кластере Kubernetes"
+
+msgid "ClusterIntegration|Kubernetes cluster health"
msgstr ""
msgid "ClusterIntegration|Kubernetes cluster integration"
-msgstr ""
+msgstr "Интеграция кластера Kubernetes"
msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project."
-msgstr ""
+msgstr "Интеграция кластера Kubernetes для этого проекта отключена."
msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project."
-msgstr ""
+msgstr "Интеграция кластера Kubernetes для этого проекта включена."
msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it."
-msgstr ""
+msgstr "Для этого проекта включена интеграция кластера Kubernetes. Отключение интеграции не повлияет на кластер Kubernetes, но соединение с GitLab будет временно отключено."
msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..."
-msgstr ""
+msgstr "Кластер Kubernetes создаётся в Google Kubernetes Engine..."
msgid "ClusterIntegration|Kubernetes cluster name"
-msgstr ""
+msgstr "Имя кластера Kubernetes"
msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr ""
+msgstr "Кластер Kubernetes был успешно создан в Google Kubernetes Engine. Обновите страницу, чтобы увидеть сведения о кластере Kubernetes"
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}"
-msgstr ""
+msgstr "Кластер Kubernetes позволяет вам использовать приложения для ревью, развёртывать ваши приложения, запускать ваши сборочные линии и многое другое более простым способом. %{link_to_help_page}"
msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project"
-msgstr ""
+msgstr "Кластеры Kubernetes могут использоваться для развертывания приложений и предоставления приложений Review для этого проекта"
msgid "ClusterIntegration|Learn more about %{link_to_documentation}"
msgstr "Узнайте больше на %{link_to_documentation}"
msgid "ClusterIntegration|Learn more about environments"
+msgstr "Узнайте больше о средах"
+
+msgid "ClusterIntegration|Learn more about security configuration"
msgstr ""
msgid "ClusterIntegration|Machine type"
@@ -954,16 +1115,16 @@ msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to crea
msgstr ""
msgid "ClusterIntegration|Manage"
-msgstr ""
+msgstr "Управление"
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
-msgstr ""
+msgstr "Управляйте вашему кластером Kubernetes, перейдя по ссылке %{link_gke}"
msgid "ClusterIntegration|More information"
-msgstr ""
+msgstr "Дополнительная информация"
msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate"
-msgstr ""
+msgstr "Несколько кластеров Kubernetes доступно в GitLab Entreprise Edition Premium и Ultimate"
msgid "ClusterIntegration|Note:"
msgstr "Примечание:"
@@ -972,7 +1133,7 @@ msgid "ClusterIntegration|Number of nodes"
msgstr "Количество узлов"
msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes"
-msgstr ""
+msgstr "Пожалуйста, укажите параметры доступа к вашему кластеру Kubernetes. Если вам необходима помощь, вы можете ознакомиться с нашей страницей %{link_to_help_page} по Kubernetes"
msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:"
msgstr "Пожалуйста, убедитесь, что ваш аккаунт Google отвечает следующим требованиям:"
@@ -993,13 +1154,13 @@ msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster in
msgstr ""
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
-msgstr ""
+msgstr "Удалить интеграцию кластера Kubernetes"
msgid "ClusterIntegration|Remove integration"
msgstr "Удалить интеграцию"
msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster."
-msgstr ""
+msgstr "Удалить эту конфигурацию кластера Kubernetes из этого проекта. Это не приведет к удалению вашего фактического кластера Kubernetes."
msgid "ClusterIntegration|Request to begin installing failed"
msgstr "Не удалось выполнить запрос на запуск процесса установки"
@@ -1007,9 +1168,12 @@ msgstr "Не удалось выполнить запрос на запуск п
msgid "ClusterIntegration|Save changes"
msgstr "Сохранить изменения"
-msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
+msgid "ClusterIntegration|Security"
msgstr ""
+msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
+msgstr "Просмотр и редактирование информации о вашем кластере Kubernetes"
+
msgid "ClusterIntegration|See machine types"
msgstr "См. типы машин"
@@ -1029,25 +1193,28 @@ msgid "ClusterIntegration|Something went wrong on our end."
msgstr " У нас что-то пошло не так."
msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine"
-msgstr ""
+msgstr "Что-то пошло не так при создании кластера Kubernetes в Google Kubernetes Engine"
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr "Произошли ошибки во время установки %{title}"
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
msgid "ClusterIntegration|Toggle Kubernetes Cluster"
-msgstr ""
+msgstr "Переключить Кластер Kubernetes"
msgid "ClusterIntegration|Toggle Kubernetes cluster"
-msgstr ""
+msgstr "Переключить кластер Kubernetes"
msgid "ClusterIntegration|Token"
msgstr "Токен"
msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way."
-msgstr ""
+msgstr "Если привязать кластер Kubernetes к этому проекту, вы с лёгкостью сможете использовать приложения для ревью, развертывать ваши приложения, запускать сборочные линии и многое другое."
msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}"
msgstr "Ваша учетная запись должна иметь %{link_to_kubernetes_engine}"
@@ -1077,13 +1244,13 @@ msgid "ClusterIntegration|properly configured"
msgstr "правильно настроен"
msgid "Collapse"
-msgstr ""
+msgstr "Свернуть"
msgid "Comment and resolve discussion"
-msgstr ""
+msgstr "Прокомментировать и закрыть дискуссию"
msgid "Comment and unresolve discussion"
-msgstr ""
+msgstr "Прокомментировать и переоткрыть дискуссию"
msgid "Comments"
msgstr "Комментарии"
@@ -1162,24 +1329,66 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
msgid "CompareBranches|Compare"
-msgstr ""
+msgstr "Сравнить"
msgid "CompareBranches|Source"
-msgstr ""
+msgstr "Источник"
msgid "CompareBranches|Target"
-msgstr ""
+msgstr "Цель"
msgid "CompareBranches|There isn't anything to compare."
+msgstr "Нечего сравнивать."
+
+msgid "Confidential"
msgstr ""
msgid "Confidentiality"
+msgstr "Конфиденциальность"
+
+msgid "Configure Gitaly timeouts."
msgstr ""
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr "Подключение..."
+
msgid "Container Registry"
msgstr "Реестр Контейнеров"
@@ -1225,6 +1434,12 @@ msgstr "Использовать различные имена образов"
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr "Когда реестр контейнеров Docker интегрирован с GitLab, каждый проект может иметь свое собственное пространство для хранения его Docker образов."
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr "Руководство участника"
@@ -1232,7 +1447,7 @@ msgid "Contributors"
msgstr "Участники"
msgid "ContributorsPage|%{startDate} – %{endDate}"
-msgstr ""
+msgstr "%{startDate} - %{endDate}"
msgid "ContributorsPage|Building repository graph."
msgstr "Построение графа репозитория."
@@ -1256,40 +1471,40 @@ msgid "Copy URL to clipboard"
msgstr "Копировать URL в буфер обмена"
msgid "Copy branch name to clipboard"
-msgstr ""
+msgstr "Скопировать имя ветки в буфер обмена"
msgid "Copy command to clipboard"
-msgstr ""
+msgstr "Копировать команду в буфер обмена"
msgid "Copy commit SHA to clipboard"
msgstr "Копировать SHA коммита в буфер обмена"
msgid "Copy reference to clipboard"
-msgstr ""
+msgstr "Скопировать ссылку в буфер обмена"
msgid "Create"
-msgstr ""
+msgstr "Создать"
msgid "Create New Directory"
msgstr "Создать Новый каталог"
msgid "Create a new branch"
-msgstr ""
+msgstr "Создать новую ветку"
msgid "Create a new branch and merge request"
-msgstr ""
+msgstr "Создать новую ветку и запрос на слияние"
msgid "Create a personal access token on your account to pull or push via %{protocol}."
msgstr "Создать личный токен на аккаунте для получения или отправки через %{protocol}."
msgid "Create branch"
-msgstr ""
+msgstr "Создать ветку"
msgid "Create directory"
msgstr "Создать каталог"
-msgid "Create empty bare repository"
-msgstr "Создать пустой репозиторий"
+msgid "Create empty repository"
+msgstr ""
msgid "Create epic"
msgstr "Создать эпик"
@@ -1297,14 +1512,17 @@ msgstr "Создать эпик"
msgid "Create file"
msgstr "Создать файл"
-msgid "Create lists from labels. Issues with that label appear in that list."
+msgid "Create group label"
msgstr ""
+msgid "Create lists from labels. Issues with that label appear in that list."
+msgstr "Создать список из меток. Обсуждения с этой меткой появляются в этом списке."
+
msgid "Create merge request"
msgstr "Создать запрос на слияние"
msgid "Create merge request and branch"
-msgstr ""
+msgstr "Создать запрос на слияние и ветку"
msgid "Create new branch"
msgstr "Создать новую ветку"
@@ -1316,11 +1534,14 @@ msgid "Create new file"
msgstr "Создать новый файл"
msgid "Create new label"
-msgstr ""
+msgstr "Создать новую метку"
msgid "Create new..."
msgstr "Новый"
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr "Ответвить"
@@ -1331,10 +1552,10 @@ msgid "CreateTokenToCloneLink|create a personal access token"
msgstr "создать персональный токен доступа"
msgid "Creates a new branch from %{branchName}"
-msgstr ""
+msgstr "Создает новую ветку из %{branchName}"
msgid "Creates a new branch from %{branchName} and re-directs to create a new merge request"
-msgstr ""
+msgstr "Создает новую ветку из %{branchName} и перенаправляет на создание нового запроса на слияние"
msgid "Creating epic"
msgstr "Создание эпика"
@@ -1346,7 +1567,7 @@ msgid "Cron syntax"
msgstr "Синтаксис Cron"
msgid "Current node"
-msgstr ""
+msgstr "Текущий узел"
msgid "Custom notification events"
msgstr "События настраиваемых уведомлений"
@@ -1354,6 +1575,9 @@ msgstr "События настраиваемых уведомлений"
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "Настраиваемые уровни уведомлений аналогичны уровню уведомлений в соответствии с участием. С настраиваемыми уровнями уведомлений вы также будете получать уведомления о выбранных событиях. Чтобы узнать больше, посмотрите %{notification_link}."
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr "Аналитика Цикла"
@@ -1391,7 +1615,7 @@ msgid "December"
msgstr "Декабрь"
msgid "Default classification label"
-msgstr ""
+msgstr "Метка классификации по умолчанию"
msgid "Define a custom pattern with cron syntax"
msgstr "Определить настраиваемый шаблон с синтаксисом cron"
@@ -1419,19 +1643,19 @@ msgid "Details"
msgstr "Подробная информация"
msgid "Diffs|No file name available"
-msgstr ""
+msgstr "Имя файла недоступно"
msgid "Directory name"
msgstr "Имя каталога"
msgid "Disable"
-msgstr ""
+msgstr "Отключить"
msgid "Discard draft"
-msgstr ""
+msgstr "Удалить черновик"
msgid "Discover GitLab Geo."
-msgstr ""
+msgstr "Откройте для себя GitLab Geo."
msgid "Dismiss Cycle Analytics introduction box"
msgstr "Отключить блок введения в Аналитику Цикла"
@@ -1439,9 +1663,15 @@ msgstr "Отключить блок введения в Аналитику Ци
msgid "Dismiss Merge Request promotion"
msgstr "Отключить анонсы для Запросов на слияние"
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr "Не показывать снова"
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr "Скачать"
@@ -1469,7 +1699,13 @@ msgstr "Простой Diff"
msgid "DownloadSource|Download"
msgstr "Скачать"
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
+msgstr "Срок"
+
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
msgstr ""
msgid "Edit"
@@ -1479,15 +1715,54 @@ msgid "Edit Pipeline Schedule %{id}"
msgstr "Изменить расписание сборочной линии %{id}"
msgid "Edit files in the editor and commit changes here"
+msgstr "Редактируйте файлы в редакторе и зафиксируйте изменения здесь"
+
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
msgstr ""
msgid "Emails"
msgstr "Email-адреса"
msgid "Enable"
-msgstr ""
+msgstr "Включить"
msgid "Enable Auto DevOps"
+msgstr "Включить Auto DevOps"
+
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
msgstr ""
msgid "Environments|An error occurred while fetching the environments."
@@ -1550,41 +1825,44 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Эпики позволят вам управлять портфелем проектов более эффективно и с меньшими усилиями"
-msgid "Error checking branch data. Please try again."
+msgid "Error Reporting and Logging"
msgstr ""
+msgid "Error checking branch data. Please try again."
+msgstr "Ошибка проверки данных ветки. Пожалуйста, попробуйте еще раз."
+
msgid "Error committing changes. Please try again."
-msgstr ""
+msgstr "Ошибка при сохранении изменений. Пожалуйста, попробуйте еще раз."
msgid "Error creating epic"
msgstr "Ошибка создания эпика"
msgid "Error fetching contributors data."
-msgstr ""
+msgstr "Ошибка получения данных участников."
msgid "Error fetching labels."
-msgstr ""
+msgstr "Ошибка получения меток."
msgid "Error fetching network graph."
-msgstr ""
+msgstr "Ошибка получения сетевого графа."
msgid "Error fetching refs"
-msgstr ""
+msgstr "Ошибка получения ссылок"
msgid "Error fetching usage ping data."
-msgstr ""
+msgstr "Ошибка при получении данных об использовании ping."
msgid "Error occurred when toggling the notification subscription"
msgstr "Произошла ошибка при переключении подписки на оповещение"
msgid "Error saving label update."
-msgstr ""
+msgstr "Ошибка при обновлении метки."
msgid "Error updating status for all todos."
-msgstr ""
+msgstr "Ошибка при обновлении статуса для всех todo."
msgid "Error updating todo status."
-msgstr ""
+msgstr "Ошибка при обновлении статуса todo."
msgid "EventFilterBy|Filter by all"
msgstr "Фильтр по всему"
@@ -1614,7 +1892,7 @@ msgid "Every week (Sundays at 4:00am)"
msgstr "Еженедельно (по воскресениям в 4:00)"
msgid "Expand"
-msgstr ""
+msgstr "Развернуть"
msgid "Explore projects"
msgstr "Обзор проектов"
@@ -1625,9 +1903,15 @@ msgstr "Исследовать публичные группы"
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1637,6 +1921,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr "Невыполненные Задания"
@@ -1644,13 +1931,13 @@ msgid "Failed to change the owner"
msgstr "Не удалось изменить владельца"
msgid "Failed to remove issue from board, please try again."
-msgstr ""
+msgstr "Ошибка при удалении обсуждения с доски, повторите попытку."
msgid "Failed to remove the pipeline schedule"
msgstr "Не удалось удалить расписание сборочной линии"
msgid "Failed to update issues, please try again."
-msgstr ""
+msgstr "Ошибка обновления обсуждений, пожалуйста, попробуйте снова."
msgid "Feb"
msgstr "Фев."
@@ -1659,7 +1946,7 @@ msgid "February"
msgstr "Февраль"
msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
+msgstr "Поля на этой странице сейчас недоступны для редактирования, вы можете настроить"
msgid "File name"
msgstr "Имя файла"
@@ -1668,6 +1955,9 @@ msgid "Files"
msgstr "Файлы"
msgid "Files (%{human_size})"
+msgstr "Файлов (%{human_size})"
+
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
msgstr ""
msgid "Filter by commit message"
@@ -1679,18 +1969,27 @@ msgstr "Поиск по пути"
msgid "Find file"
msgstr "Найти файл"
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr "Первый"
msgid "FirstPushedBy|pushed by"
msgstr "отправлено автором"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Ответвление"
+msgstr[1] "Ответвления"
+msgstr[2] "Ответвлений"
+msgstr[3] "Ответвления"
msgid "ForkedFromProjectPath|Forked from"
msgstr "Ответвлено от"
@@ -1698,9 +1997,15 @@ msgstr "Ответвлено от"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr "Ответвление от %{project_name} (удалено)"
+msgid "Forking in progress"
+msgstr "Выполняется ответвление"
+
msgid "Format"
msgstr "Формат"
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr "От создания обсуждения до развертывания реализации в рабочей среде"
@@ -1714,17 +2019,23 @@ msgid "GPG Keys"
msgstr "GPG Ключи"
msgid "Generate a default set of labels"
-msgstr ""
+msgstr "Создать стандартный набор меток"
msgid "Geo Nodes"
msgstr "Географические Узлы"
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "На узле сбой или он не работает."
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr "Узел функционирует медленно, перегужен или только что восстановлен после сбоя."
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1770,21 +2081,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1797,9 +2135,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1830,21 +2180,42 @@ msgstr "Выберите группы для репликации."
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr "URL-адрес репозитория Git"
+
msgid "Git revision"
-msgstr ""
+msgstr "Ревизия git"
msgid "Git storage health information has been reset"
msgstr "Информация о стабильности Git хранилища была сброшена"
msgid "Git version"
+msgstr "Версия Git"
+
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
msgstr ""
msgid "GitLab Runner section"
msgstr "Секция Gitlab Runner"
-msgid "Gitaly Servers"
+msgid "GitLab single sign on URL"
msgstr ""
+msgid "Gitaly"
+msgstr ""
+
+msgid "Gitaly Servers"
+msgstr "Серверы Gitaly"
+
+msgid "Go back"
+msgstr "Вернуться"
+
msgid "Go to your fork"
msgstr "Перейти к вашему ответвлению"
@@ -1855,7 +2226,7 @@ msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab ad
msgstr "Аутентификация Google не %{link_to_documentation}. Попросите своего администратора GitLab, если вы хотите воспользоваться этим сервисом."
msgid "Got it!"
-msgstr ""
+msgstr "Понятно!"
msgid "GroupRoadmap|Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -1911,9 +2282,6 @@ msgstr "Группы не найдены"
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr "Вы можете управлять правами и доступом участников вашей группы к каждому проекту в группе."
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr "Создать проект в этой группе."
@@ -1944,6 +2312,9 @@ msgstr "К сожалению, по вашему запросу групп ил
msgid "Have your users email"
msgstr "Электронная почта для обращений пользователей"
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr "Проверка работоспособности"
@@ -1962,6 +2333,15 @@ msgstr "Проблем работоспособности не обнаруже
msgid "HealthCheck|Unhealthy"
msgstr "Нестабильный"
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1975,12 +2355,39 @@ msgstr "История"
msgid "Housekeeping successfully started"
msgstr "Очистка успешно запущена"
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr "Выполняется импорт"
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr "Импорт репозитория"
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr "Улучшить доски обсуждений с помощью GitLab Enterprise Edition."
@@ -1991,19 +2398,22 @@ msgid "Improve search with Advanced Global Search and GitLab Enterprise Edition.
msgstr "Улучшить поиск при помощи Расширенного Глобального Поиска и GitLab Enterprise Edition."
msgid "Install Runner on Kubernetes"
-msgstr ""
+msgstr "Установить Runner на Kubernetes"
msgid "Install a Runner compatible with GitLab CI"
msgstr "Установите Gitlab Runner совместимый с Gitlab CI"
msgid "Instance"
msgid_plural "Instances"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Экземпляр"
+msgstr[1] "Экземпляра"
+msgstr[2] "Экземпляров"
+msgstr[3] "Экземпляры"
msgid "Instance does not support multiple Kubernetes clusters"
+msgstr "Экземпляр не поддерживает несколько кластеров Kubernetes"
+
+msgid "Integrations"
msgstr ""
msgid "Interested parties can even contribute by pushing commits if they want to."
@@ -2060,26 +2470,29 @@ msgstr "Июн."
msgid "June"
msgstr "Июнь"
-msgid "Kubernetes"
+msgid "Koding"
msgstr ""
+msgid "Kubernetes"
+msgstr "Kubernetes"
+
msgid "Kubernetes Cluster"
-msgstr ""
+msgstr "Кластер Kubernetes"
msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}"
-msgstr ""
+msgstr "Время создания кластера Kubernetes превышает время ожидания; %{timeout}"
msgid "Kubernetes cluster integration was not removed."
-msgstr ""
+msgstr "Интеграция кластера Кубернете не была удалена."
msgid "Kubernetes cluster integration was successfully removed."
-msgstr ""
+msgstr "Интеграция кластера Kubernetes была успешно удалена."
msgid "Kubernetes cluster was successfully updated."
-msgstr ""
+msgstr "Кластер Kubernetes был успешно обновлён."
msgid "Kubernetes configured"
-msgstr ""
+msgstr "Kubernetes настроен"
msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new Kubernetes Clusters page"
msgstr ""
@@ -2090,12 +2503,30 @@ msgstr "Отключено"
msgid "LFSStatus|Enabled"
msgstr "Включено"
+msgid "Label"
+msgstr "Метка"
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr "Метки"
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "Последний %d день"
@@ -2155,10 +2586,13 @@ msgid "License"
msgstr "Лицензия"
msgid "List"
+msgstr "Список"
+
+msgid "List your GitHub repositories"
msgstr ""
msgid "Loading the GitLab IDE..."
-msgstr ""
+msgstr "Загрузка GitLab IDE..."
msgid "Lock"
msgstr "Блокировка"
@@ -2169,9 +2603,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr "Заблокировано"
@@ -2187,9 +2618,21 @@ msgstr "Войти"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr "Мар."
@@ -2211,6 +2654,9 @@ msgstr "Среднее"
msgid "Members"
msgstr "Участники"
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr "Запросы на Слияние"
@@ -2223,15 +2669,87 @@ msgstr "Запрос на слияние"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr "Сообщения"
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2247,6 +2765,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "добавить ключ SSH"
@@ -2259,6 +2786,9 @@ msgstr ""
msgid "Monitoring"
msgstr "Мониторинг"
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2335,6 +2865,9 @@ msgstr "Новая подгруппа"
msgid "New tag"
msgstr "Новый тег"
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2353,6 +2886,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr "Нет репозитория"
@@ -2368,6 +2904,12 @@ msgstr ""
msgid "Not available"
msgstr "Недоступно"
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2377,6 +2919,18 @@ msgstr "Недостаточно данных"
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr "Уведомления о событиях"
@@ -2461,6 +3015,12 @@ msgstr "Октябрь"
msgid "OfSearchInADropdown|Filter"
msgstr "Фильтр"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr "Только участники проекта могут оставлять комментарии."
@@ -2482,12 +3042,18 @@ msgstr "Настройки"
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr "Обзор"
msgid "Owner"
msgstr "Владелец"
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr "Последняя »"
@@ -2500,9 +3066,21 @@ msgstr "Предыдущая"
msgid "Pagination|« First"
msgstr "« Первая"
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr "Пароль"
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr "Сборочная линия"
@@ -2584,9 +3162,36 @@ msgstr "Сборочные линии за последний год"
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2617,6 +3222,9 @@ msgstr "со стадией"
msgid "Pipeline|with stages"
msgstr "со стадиями"
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2626,6 +3234,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr "Пожалуйста, решите reCAPTCHA"
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr "Предпочтения"
@@ -2680,6 +3294,9 @@ msgstr "Ваша учетная запись в настоящее время я
msgid "Profiles|your account"
msgstr "ваша учетная запись"
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2704,9 +3321,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr "Детали проекта"
@@ -2803,6 +3417,12 @@ msgstr "К сожалению, по вашему запросу проекты
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Эта функциональность требует поддержки localStorage в вашем браузере"
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2815,9 +3435,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr "По умолчанию, Prometheus запускается по адресу ‘http://localhost:9090’. Не рекомендуется изменять адрес и порт по умолчанию, так как это может привести к конфликту с другим сервисами запущенными на GitLab сервере."
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr "Определение и настройка метрик..."
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2830,20 +3462,14 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr "Метрики"
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr "Метрики автоматически настраиваются и отслеживаются на основе популярных библиотек метрик."
-
msgid "PrometheusService|Missing environment variable"
msgstr "Пропущена переменная окружения"
-msgid "PrometheusService|Monitored"
-msgstr "Мониторинг подключен"
-
msgid "PrometheusService|More information"
msgstr "Дополнительная информация"
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
-msgstr "Ни одной метрики не отслеживается. Для начала мониторинга разверните окружение."
+msgid "PrometheusService|New metric"
+msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Базовый адрес Prometheus API, например http://prometheus.example.com/"
@@ -2851,6 +3477,9 @@ msgstr "Базовый адрес Prometheus API, например http://promet
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2860,8 +3489,17 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
-msgstr "Просмотр окружений"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
+msgstr ""
msgid "Protip:"
msgstr ""
@@ -2896,6 +3534,9 @@ msgstr "Подробнее"
msgid "Readme"
msgstr "Инструкция"
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "Ветки"
@@ -2929,6 +3570,9 @@ msgstr "Связанные Запросы на Слияние"
msgid "Related Merged Requests"
msgstr "Связанные Влитые Запросы"
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr "Напомнить позже"
@@ -2944,12 +3588,24 @@ msgstr "Удалить проект"
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr "Репозиторий"
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr "Запрос доступа"
@@ -2963,6 +3619,9 @@ msgid "Reset runners registration token"
msgstr "Сбросить ключ регистрации Gitlab Runners"
msgid "Resolve discussion"
+msgstr "Закрыть дискуссию"
+
+msgid "Response"
msgstr ""
msgid "Reveal value"
@@ -2978,9 +3637,36 @@ msgstr "Отменить это коммит"
msgid "Revert this merge request"
msgstr "Отменить этот запрос на слияние"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr "SSH Ключи"
@@ -2996,6 +3682,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr "Расписание новой сборочной линии"
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr "Расписания"
@@ -3005,6 +3694,9 @@ msgstr "Планирование Сборочных Линий"
msgid "Scoped issue boards"
msgstr "Тематические доски обсуждений"
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr "Найти ветки и теги"
@@ -3068,15 +3760,33 @@ msgstr "Шаблоны Служб"
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "Установите пароль в своем аккаунте, чтобы отправлять или получать код через %{protocol}."
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr "Настройка Koding"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "установите пароль"
@@ -3086,6 +3796,9 @@ msgstr "Настройки"
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3123,6 +3836,18 @@ msgstr "Отсутствует"
msgid "Sidebar|Weight"
msgstr "Вес"
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr "Сниппеты"
@@ -3130,18 +3855,12 @@ msgid "Something went wrong on our end"
msgstr ""
msgid "Something went wrong on our end."
-msgstr "У нас что-то пошло не так."
-
-msgid "Something went wrong trying to change the confidentiality of this issue"
msgstr ""
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr "Что-то пошло не так при попытке изменения состояния блокировки ${this.issuableDisplayName}"
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3153,12 +3872,6 @@ msgstr "Что-то пошло не так при получении проек
msgid "Something went wrong while fetching the registry list."
msgstr "Что-то пошло не так при получении списка реестров."
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3276,12 +3989,21 @@ msgstr "Исходный текст недоступен"
msgid "Spam Logs"
msgstr "Спам Логи"
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr "Укажите следующий URL во время настройки Gitlab Runner:"
msgid "StarProject|Star"
msgstr "Отметить"
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr "Отмеченные проекты"
@@ -3291,6 +4013,15 @@ msgstr "Начать %{new_merge_request} с этих изменений"
msgid "Start the Runner!"
msgstr "Запустить GitLab Runner!"
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr "Остановлен"
@@ -3303,9 +4034,15 @@ msgstr "Подгруппы"
msgid "Switch branch/tag"
msgstr "Переключить ветка/тег"
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr "Системные Обработчики"
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3388,6 +4125,9 @@ msgstr "защищенный"
msgid "Target Branch"
msgstr "Ветка"
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr "Команда"
@@ -3403,15 +4143,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "Этап написания кода показывает время с первого коммита до создания запроса на слияние. Данные автоматически добавятся сюда после того, как вы создать свой первый запрос на слияние."
msgid "The collection of events added to the data gathered for that stage."
msgstr "Коллекция событий добавленных в данные собранные для этого этапа."
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr "Связь с ответвлением удалена."
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "Стадия обсуждения показывает время, которое потребуется с момента создания обсуждения до назначения обсуждению вехи, или добавления обсуждения на вашу доску задач. Начните создавать обсуждения, чтобы увидеть сведения для этой стадии."
@@ -3424,12 +4173,18 @@ msgstr "Количество попыток, которые GitLab будет п
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr "Количество сбоев, после которого Gitlab полностью прекратит доступ к хранилищу. Изменение счётчика \"количество сбоев\" может быть произведено через административный интерфейс: %{link_to_health_page} или при помощи API %{api_documentation_link}."
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr "Фаза жизненного цикла разработки."
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr "Этап планирования показывает время от предыдущего шага до отправки первого коммита. Добавляется автоматически, как только отправите свой первый коммит."
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr "Производственный этап показывает общее время между созданием обсуждения и развертыванием кода в продуктивной среде. Данные будут автоматически добавлены после полного завершения идеи."
@@ -3445,6 +4200,9 @@ msgstr "Репозиторий для этого проекта не сущес
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "Этап обзора показывает время от создания запроса слияния до его выполнения. Данные будут автоматически добавлены после завершения первого запроса на слияние."
@@ -3481,6 +4239,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr "Проблемы с доступом к Git хранилищу: "
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3512,7 +4273,7 @@ msgid "This is the author's first Merge Request to this project."
msgstr "Это первый Запрос на слияние от автора в этот проект."
msgid "This issue is confidential"
-msgstr ""
+msgstr "Это обсуждение является конфиденциальным"
msgid "This issue is confidential and locked."
msgstr "Это обсуждение конфиденциально и заблокировано."
@@ -3553,6 +4314,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr "Эти электронные письма автоматически преобразуются в обсуждения (комментарии рассылаются как ветвь обсуждения в почте), перечисленные здесь."
@@ -3565,6 +4329,12 @@ msgstr "Время до начала работы над обсуждением"
msgid "Time between merge request creation and merge/close"
msgstr "Время между созданием запроса слияния и слиянием / закрытием"
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3726,6 +4496,36 @@ msgstr ""
msgid "Title"
msgstr "Заголовок"
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
@@ -3765,23 +4565,17 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr "Включить Службу Поддержки"
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr "Разблокировать"
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr "Разблокировано"
msgid "Unresolve discussion"
-msgstr ""
+msgstr "Переоткрыть дискуссию"
msgid "Unstar"
msgstr "Снять отметку"
@@ -3816,6 +4610,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr "кликните для загрузки"
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr "Используйте Службу поддержки для связи с вашими пользователями (например, для осуществления поддержки клиентов) через электронную почту непосредственно в GitLab"
@@ -3825,24 +4625,51 @@ msgstr "Используйте следующий токен регистрац
msgid "Use your global notification setting"
msgstr "Используются глобальный настройки уведомлений"
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr "Просмотр файла @ "
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr "Просмотреть открытый запрос на слияние"
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr "Просмотр заменённого файла @ "
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Ограниченный"
@@ -3870,12 +4697,18 @@ msgstr "Мы хотим быть уверены, что это вы, пожал
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr "Веб-обработчики позволяют вам вызывать адрес URL если, например, отправлен новый код или создано новое обсуждение. Вы можете настроить веб-обработчики так, чтобы они реагировали на определённые события, такие как отправки кода, обсуждения или запросы на слияние. Групповые веб-обработчики применяются ко всем проектам в группе и позволяют вам стандартизовать функциональность веб-обработчиков для всей вашей группы."
msgid "Weight"
msgstr "Вес"
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr "Wiki"
@@ -3907,13 +4740,13 @@ msgid "WikiHistoricalPage|This is an old version of this page."
msgstr "Это устаревшая версия этой страницы."
msgid "WikiHistoricalPage|You can view the %{most_recent_link} or browse the %{history_link}."
-msgstr "Вы можете увидеть %{most_recent_link} либо просмотреть %{history_link}."
+msgstr "Вы можете увидеть %{most_recent_link}, либо просмотреть %{history_link}."
msgid "WikiHistoricalPage|history"
-msgstr "история"
+msgstr "историю изменений"
msgid "WikiHistoricalPage|most recent version"
-msgstr "последняя версия"
+msgstr "последнюю версию"
msgid "WikiMarkdownDocs|More examples are in the %{docs_link}"
msgstr "Дополнительные примеры находятся в %{docs_link}"
@@ -3996,14 +4829,20 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "Вы собираетесь удалить %{group_name}. Удаленные группы НЕ МОГУТ быть восстановлены! Вы АБСОЛЮТНО уверены?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "Вы хотите удалить %{project_name_with_namespace}. Удаленный проект НЕ МОЖЕТ быть восстановлен! Вы АБСОЛЮТНО уверены?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "Вы собираетесь удалить связь ответвления с исходным проектом %{forked_from_project}. Вы АБСОЛЮТНО уверены?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "Вы собираетесь передать проект %{project_name_with_namespace} другому владельцу. Вы АБСОЛЮТНО уверены?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr ""
msgid "You can also create a project from the command line."
msgstr ""
@@ -4077,9 +4916,27 @@ msgstr "Вы не сможете работать с проектом через
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4095,6 +4952,16 @@ msgstr "Ваше имя"
msgid "Your projects"
msgstr "Ваши проекты"
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "assign yourself"
msgstr ""
@@ -4104,12 +4971,30 @@ msgstr "имя ветви"
msgid "by"
msgstr "по"
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4137,9 +5022,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4152,25 +5034,28 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
-msgstr "коммит"
-
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
@@ -4180,15 +5065,44 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4202,9 +5116,21 @@ msgstr[3] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4217,11 +5143,14 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
msgid "mrWidget|Cancel automatic merge"
-msgstr ""
+msgstr "Отменить автоматическое слияние"
msgid "mrWidget|Check out branch"
msgstr ""
@@ -4244,18 +5173,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4296,7 +5234,7 @@ msgid "mrWidget|Request to merge"
msgstr ""
msgid "mrWidget|Resolve conflicts"
-msgstr ""
+msgstr "Разрешить конфликты"
msgid "mrWidget|Revert"
msgstr ""
@@ -4340,6 +5278,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4380,6 +5321,9 @@ msgstr "пароль"
msgid "personal access token"
msgstr "токен для персонального доступа"
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4389,6 +5333,9 @@ msgstr "исходный текст"
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr "чтобы помочь участникам взаимодействовать эффективнее!"
diff --git a/locale/tr_TR/gitlab.po b/locale/tr_TR/gitlab.po
index b4df4c4b1af..6a025dfbae5 100644
--- a/locale/tr_TR/gitlab.po
+++ b/locale/tr_TR/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:20-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:35-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
@@ -29,6 +29,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -44,6 +49,11 @@ msgid_plural "%d merge requests"
msgstr[0] ""
msgstr[1] ""
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] ""
@@ -60,6 +70,9 @@ msgid_plural "%{count} participants"
msgstr[0] "%{count} katılımcı"
msgstr[1] "%{count} katılımcı"
+msgid "%{loadingIcon} Started"
+msgstr ""
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
@@ -103,15 +116,30 @@ msgstr "İlk katkı!"
msgid "2FA enabled"
msgstr ""
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr ""
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr ""
msgid "Abuse Reports"
msgstr "Kötüye Kullanım Raporları"
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr "Erişim anahtarları"
@@ -121,6 +149,9 @@ msgstr ""
msgid "Account"
msgstr "Hesap"
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "Etkin"
@@ -217,9 +248,33 @@ msgstr "Tümü"
msgid "All changes are committed"
msgstr ""
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr "Kubernetes kümelerini eklemeye ve yönetmenize olanak tanır."
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
msgid "An error occurred previewing the blob"
msgstr ""
@@ -298,6 +353,9 @@ msgstr "Kullanıcı adı doğrulanırken bir hata oluştu"
msgid "An error occurred. Please try again."
msgstr "Bir hata oluştu. Lütfen tekrar deneyin."
+msgid "Any Label"
+msgstr ""
+
msgid "Appearance"
msgstr "Görünüm"
@@ -331,6 +389,9 @@ msgstr "Emin misiniz?"
msgid "Artifacts"
msgstr ""
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr "#FF0000 gibi özel renk ata"
@@ -343,6 +404,15 @@ msgstr ""
msgid "Assign to"
msgstr "Ata"
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr ""
@@ -367,6 +437,9 @@ msgstr "Yazarlar: %{authors}"
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -409,6 +482,12 @@ msgstr "Avatar kaldırılacak. Emin misiniz?"
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -492,6 +571,15 @@ msgstr ""
msgid "Branches"
msgstr ""
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr ""
@@ -537,12 +625,39 @@ msgstr ""
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr ""
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
msgstr ""
msgid "Branches|Sort by"
msgstr ""
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -588,30 +703,45 @@ msgstr ""
msgid "Browse files"
msgstr ""
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr ""
msgid "CI / CD"
msgstr ""
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
msgstr ""
+msgid "CI/CD for external repo"
+msgstr ""
+
msgid "CICD|Jobs"
msgstr ""
msgid "Cancel"
msgstr ""
-msgid "Cancel edit"
+msgid "Cannot be merged automatically"
msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr ""
@@ -666,6 +796,12 @@ msgstr ""
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -768,6 +904,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr ""
@@ -867,6 +1012,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr ""
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -876,6 +1024,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr ""
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr ""
@@ -894,6 +1045,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -927,6 +1081,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -987,6 +1144,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1014,6 +1174,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1138,6 +1301,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1153,9 +1322,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr ""
@@ -1201,6 +1406,12 @@ msgstr ""
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr ""
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr ""
@@ -1264,7 +1475,7 @@ msgstr ""
msgid "Create directory"
msgstr ""
-msgid "Create empty bare repository"
+msgid "Create empty repository"
msgstr ""
msgid "Create epic"
@@ -1273,6 +1484,9 @@ msgstr ""
msgid "Create file"
msgstr ""
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1297,6 +1511,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr ""
@@ -1330,6 +1547,9 @@ msgstr ""
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr ""
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr ""
@@ -1413,9 +1633,15 @@ msgstr ""
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr ""
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr ""
@@ -1443,9 +1669,15 @@ msgstr ""
msgid "DownloadSource|Download"
msgstr ""
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr ""
@@ -1455,6 +1687,18 @@ msgstr ""
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr ""
@@ -1464,6 +1708,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1524,6 +1795,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1599,9 +1873,15 @@ msgstr ""
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1611,6 +1891,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1644,6 +1927,9 @@ msgstr ""
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr ""
@@ -1653,12 +1939,21 @@ msgstr ""
msgid "Find file"
msgstr ""
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr ""
msgid "FirstPushedBy|pushed by"
msgstr ""
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] ""
@@ -1670,9 +1965,15 @@ msgstr ""
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr ""
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr ""
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr ""
@@ -1691,12 +1992,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1742,21 +2049,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1769,9 +2103,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1802,6 +2148,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1811,12 +2160,30 @@ msgstr ""
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr ""
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
@@ -1883,9 +2250,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr ""
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr ""
@@ -1916,6 +2280,9 @@ msgstr ""
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr ""
@@ -1934,6 +2301,15 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1945,12 +2321,39 @@ msgstr ""
msgid "Housekeeping successfully started"
msgstr ""
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr ""
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -1974,6 +2377,9 @@ msgstr[1] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2028,6 +2434,9 @@ msgstr ""
msgid "June"
msgstr ""
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2058,12 +2467,30 @@ msgstr ""
msgid "LFSStatus|Enabled"
msgstr ""
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr ""
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] ""
@@ -2123,6 +2550,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2135,9 +2565,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr ""
@@ -2153,9 +2580,21 @@ msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr ""
@@ -2177,6 +2616,9 @@ msgstr ""
msgid "Members"
msgstr ""
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr ""
@@ -2189,15 +2631,87 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr ""
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2213,6 +2727,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr ""
@@ -2225,6 +2748,9 @@ msgstr ""
msgid "Monitoring"
msgstr ""
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2299,6 +2825,9 @@ msgstr ""
msgid "New tag"
msgstr ""
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2317,6 +2846,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr ""
@@ -2332,6 +2864,12 @@ msgstr ""
msgid "Not available"
msgstr ""
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2341,6 +2879,18 @@ msgstr ""
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr ""
@@ -2425,6 +2975,12 @@ msgstr ""
msgid "OfSearchInADropdown|Filter"
msgstr ""
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr ""
@@ -2446,12 +3002,18 @@ msgstr ""
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Owner"
msgstr ""
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr ""
@@ -2464,9 +3026,21 @@ msgstr ""
msgid "Pagination|« First"
msgstr ""
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr ""
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr ""
@@ -2548,9 +3122,36 @@ msgstr ""
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2581,6 +3182,9 @@ msgstr ""
msgid "Pipeline|with stages"
msgstr ""
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2590,6 +3194,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -2644,6 +3254,9 @@ msgstr ""
msgid "Profiles|your account"
msgstr ""
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2668,9 +3281,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr ""
@@ -2767,6 +3377,12 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2779,9 +3395,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr ""
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr ""
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2794,19 +3422,13 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr ""
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr ""
-
msgid "PrometheusService|Missing environment variable"
msgstr ""
-msgid "PrometheusService|Monitored"
-msgstr ""
-
msgid "PrometheusService|More information"
msgstr ""
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
+msgid "PrometheusService|New metric"
msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
@@ -2815,6 +3437,9 @@ msgstr ""
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2824,7 +3449,16 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
msgstr ""
msgid "Protip:"
@@ -2860,6 +3494,9 @@ msgstr ""
msgid "Readme"
msgstr ""
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr ""
@@ -2893,6 +3530,9 @@ msgstr ""
msgid "Related Merged Requests"
msgstr ""
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -2908,12 +3548,24 @@ msgstr ""
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr ""
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr ""
@@ -2929,6 +3581,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] ""
@@ -2940,9 +3595,36 @@ msgstr ""
msgid "Revert this merge request"
msgstr ""
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr ""
@@ -2958,6 +3640,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr ""
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -2967,6 +3652,9 @@ msgstr ""
msgid "Scoped issue boards"
msgstr ""
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr ""
@@ -3030,15 +3718,33 @@ msgstr ""
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr ""
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr ""
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -3048,6 +3754,9 @@ msgstr ""
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3083,6 +3792,18 @@ msgstr ""
msgid "Sidebar|Weight"
msgstr ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr ""
@@ -3092,16 +3813,10 @@ msgstr ""
msgid "Something went wrong on our end."
msgstr ""
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr ""
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3113,12 +3828,6 @@ msgstr ""
msgid "Something went wrong while fetching the registry list."
msgstr ""
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3236,12 +3945,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr ""
msgid "StarProject|Star"
msgstr ""
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3251,6 +3969,15 @@ msgstr ""
msgid "Start the Runner!"
msgstr ""
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -3263,9 +3990,15 @@ msgstr ""
msgid "Switch branch/tag"
msgstr ""
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr ""
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3346,6 +4079,9 @@ msgstr ""
msgid "Target Branch"
msgstr ""
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr ""
@@ -3361,15 +4097,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr ""
msgid "The collection of events added to the data gathered for that stage."
msgstr ""
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr ""
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr ""
@@ -3382,12 +4127,18 @@ msgstr ""
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr ""
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr ""
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr ""
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr ""
@@ -3403,6 +4154,9 @@ msgstr ""
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr ""
@@ -3439,6 +4193,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3511,6 +4268,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr ""
@@ -3523,6 +4283,12 @@ msgstr ""
msgid "Time between merge request creation and merge/close"
msgstr ""
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3680,6 +4446,36 @@ msgstr ""
msgid "Title"
msgstr ""
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
@@ -3719,18 +4515,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr ""
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3770,6 +4560,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr ""
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr ""
@@ -3779,24 +4575,51 @@ msgstr ""
msgid "Use your global notification setting"
msgstr ""
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr ""
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr ""
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr ""
@@ -3824,12 +4647,18 @@ msgstr ""
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr ""
msgid "Weight"
msgstr ""
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr ""
@@ -3950,13 +4779,19 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr ""
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
msgstr ""
msgid "You can also create a project from the command line."
@@ -4031,9 +4866,27 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4049,6 +4902,14 @@ msgstr ""
msgid "Your projects"
msgstr ""
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "assign yourself"
msgstr ""
@@ -4058,12 +4919,30 @@ msgstr ""
msgid "by"
msgstr ""
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4091,9 +4970,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4106,25 +4982,28 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
@@ -4132,15 +5011,40 @@ msgid_plural "days"
msgstr[0] ""
msgstr[1] ""
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4152,9 +5056,21 @@ msgstr[1] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4167,6 +5083,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4194,18 +5113,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4290,6 +5218,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4328,6 +5259,9 @@ msgstr ""
msgid "personal access token"
msgstr ""
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4337,6 +5271,9 @@ msgstr ""
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
diff --git a/locale/uk/gitlab.po b/locale/uk/gitlab.po
index 44dbbe8141b..2c7d3751531 100644
--- a/locale/uk/gitlab.po
+++ b/locale/uk/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:20-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:35-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
@@ -33,6 +33,13 @@ msgstr[1] "%d коміта позаду"
msgstr[2] "%d комітів позаду"
msgstr[3] "%d комітів позаду"
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] "%d експортер"
+msgstr[1] "%d експортера"
+msgstr[2] "%d експортерів"
+msgstr[3] "%d експортерів"
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d проблема"
@@ -54,12 +61,19 @@ msgstr[1] "%d запита на злиття"
msgstr[2] "%d запитів на злиття"
msgstr[3] "%d запитів на злиття"
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] "%d метрика"
+msgstr[1] "%d метрики"
+msgstr[2] "%d метрик"
+msgstr[3] "%d метрик"
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
-msgstr[0] "%s доданий коміт був виключений для запобігання проблем із швидкодією."
-msgstr[1] "%s доданих коміта були виключені для запобігання проблем із швидкодією."
-msgstr[2] "%s доданих комітів були виключені для запобігання проблем із швидкодією."
-msgstr[3] "%s доданих комітів були виключені для запобігання проблем із швидкодією."
+msgstr[0] "%s доданий коміт був виключений для запобігання проблем із продуктивністю."
+msgstr[1] "%s доданих коміта були виключені для запобігання проблем із продуктивністю."
+msgstr[2] "%s доданих комітів були виключені для запобігання проблем із продуктивністю."
+msgstr[3] "%s доданих комітів були виключені для запобігання проблем із продуктивністю."
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} і %{openOrClose} %{noteable}"
@@ -74,6 +88,9 @@ msgstr[1] "%{count} участника"
msgstr[2] "%{count} участників"
msgstr[3] "%{count} участників"
+msgid "%{loadingIcon} Started"
+msgstr "%{loadingIcon} Початок"
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} заблоковано користувачем GitLab %{lock_user_id}"
@@ -121,15 +138,30 @@ msgstr "Перший внесок!"
msgid "2FA enabled"
msgstr "Двоетапна аутентифікація увімкнена"
+msgid "Removes source branch"
+msgstr "Видаляє гілку-джерело"
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Набір графіків відносно безперервної інтеграції"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr "У вашому форку буде створено нову гілку, а також буде ініційований новий запит на злиття."
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr "Проект — це місце де ви можете розміщувати свої файли (репозиторій), планувати роботу (проблеми) і публікувати документацію (wiki), %{among_other_things_link}."
+
+msgid "A user with write access to the source branch selected this option"
+msgstr "Користувач із правом запису в гілку-джерело вибрав цей варіант"
+
msgid "About auto deploy"
msgstr "Про авто розгортання"
msgid "Abuse Reports"
msgstr "Звіти про зловживання"
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr "Токени доступу"
@@ -139,6 +171,9 @@ msgstr "Доступ до сховищ, що вийшли з ладу, тимч
msgid "Account"
msgstr "Обліковий запис"
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "Активний"
@@ -235,9 +270,33 @@ msgstr "Всі"
msgid "All changes are committed"
msgstr "Всі зміни закомічені"
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr "Всі функції для нових проектів беруться із шаблонів або під час імпортування, але ви можете вимикати їх пізніше в налаштуваннях проекту."
+
+msgid "Allow edits from maintainers."
+msgstr "Дозволити редагування командою проекту."
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr "Дозволяє додавати та керувати кластерами Kubernetes."
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr "Крім того, ви можете використовувати %{personal_access_token_link}. Коли ви створюватимете свій персональний токен доступу, вам потрібно буде вибрати область репозиторія, щоб ми могли відобразити список ваших публічних та приватних репозиторіїв, доступних для імпорту."
+
msgid "An error occurred previewing the blob"
msgstr "Сталася помилка під час попереднього перегляду об'єкта"
@@ -251,10 +310,10 @@ msgid "An error occurred while adding approver"
msgstr "Помилка при додаванні учасника для затвердження"
msgid "An error occurred while detecting host keys"
-msgstr ""
+msgstr "Сталася помилка при виявленні ключів хоста"
msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again."
-msgstr ""
+msgstr "Сталася помилка при вимкненні повідомлення про функцію. Оновіть сторінку і спробуйте знову."
msgid "An error occurred while fetching markdown preview"
msgstr "Сталася помилка при попередньому перегляді markdown"
@@ -296,7 +355,7 @@ msgid "An error occurred while rendering KaTeX"
msgstr "Сталася помилка при рендерингу KaTeX"
msgid "An error occurred while rendering preview broadcast message"
-msgstr ""
+msgstr "Помилка при попередньому перегляді оголошення для користувачів"
msgid "An error occurred while retrieving calendar activity"
msgstr "Сталася помилка при отриманні календаря активності"
@@ -305,10 +364,10 @@ msgid "An error occurred while retrieving diff"
msgstr "Сталася помилка при отриманні різниці"
msgid "An error occurred while saving LDAP override status. Please try again."
-msgstr ""
+msgstr "Помилка при збереженні статусу перевизначення LDAP. Будь ласка, спробуйте ще раз."
msgid "An error occurred while saving assignees"
-msgstr ""
+msgstr "Помилка при збереженні виконавців"
msgid "An error occurred while validating username"
msgstr "Сталася помилка під час перевірки імені користувача"
@@ -316,6 +375,9 @@ msgstr "Сталася помилка під час перевірки імен
msgid "An error occurred. Please try again."
msgstr "Сталась помилка. Спробуйте ще раз."
+msgid "Any Label"
+msgstr "Будь-яка мітка"
+
msgid "Appearance"
msgstr "Зовнішній вигляд"
@@ -335,10 +397,10 @@ msgid "Are you sure you want to delete this pipeline schedule?"
msgstr "Ви впевнені, що хочете видалити цей розклад для конвеєра?"
msgid "Are you sure you want to reset registration token?"
-msgstr "Ви впевнені, що бажаєте скинути реєстраційний токен?"
+msgstr "Ви впевнені, що бажаєте перегенерувати реєстраційний токен?"
msgid "Are you sure you want to reset the health check token?"
-msgstr "Ви впевнені, що хочете скинути цей ключ перевірки працездатності?"
+msgstr "Ви впевнені, що Ви хочете перегенерувати цей ключ перевірки працездатності?"
msgid "Are you sure you want to unlock %{path_lock_path}?"
msgstr "Ви впевнені, що хочете розблокувати %{path_lock_path}?"
@@ -349,6 +411,9 @@ msgstr "Ви впевнені?"
msgid "Artifacts"
msgstr "Артефакти"
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr "Призначити власний колір типу #FF0000"
@@ -361,6 +426,15 @@ msgstr "Призначити етап"
msgid "Assign to"
msgstr "Призначити"
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr "Виконавець"
@@ -385,6 +459,9 @@ msgstr "Автори: %{authors}"
msgid "Auto DevOps enabled"
msgstr "Auto DevOps увімкнено"
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr "Для коректної роботи Auto Review Apps та Auto Deploy необхіден %{kubernetes}."
@@ -398,7 +475,7 @@ msgid "AutoDevOps|Auto DevOps (Beta)"
msgstr "Auto DevOps (бета)"
msgid "AutoDevOps|Auto DevOps documentation"
-msgstr "Auto DevOps документація"
+msgstr "Auto DevOps документації"
msgid "AutoDevOps|Enable in settings"
msgstr "Включити в налаштуваннях"
@@ -419,7 +496,7 @@ msgid "AutoDevOps|enable Auto DevOps (Beta)"
msgstr "Увімкнути Auto DevOps (Beta)"
msgid "Available"
-msgstr "Доступний"
+msgstr "Доступно"
msgid "Avatar will be removed. Are you sure?"
msgstr "Аватар буде видалено. Ви впевнені?"
@@ -427,6 +504,12 @@ msgstr "Аватар буде видалено. Ви впевнені?"
msgid "Average per day: %{average}"
msgstr "В середньому за день: %{average}"
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr "Почати із виділеного коміту"
@@ -512,6 +595,15 @@ msgstr "Перейти в гілку"
msgid "Branches"
msgstr "Гілки"
+msgid "Branches|Active"
+msgstr "Активні"
+
+msgid "Branches|Active branches"
+msgstr "Активні гілки"
+
+msgid "Branches|All"
+msgstr "Всі"
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr "Не можу знайти HEAD-коміт для цієї гілки"
@@ -557,12 +649,39 @@ msgstr "Як тільки ви підтвердите і натиснете %{de
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr "Тільки керівник або власник проекту може видалити захищену гілку"
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
-msgstr "Керувати захищеними гілками можливо в %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr "Огляд"
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr "Керувати захищеними гілками можливо в %{project_settings_link}."
+
+msgid "Branches|Show active branches"
+msgstr "Показувати активні гілки"
+
+msgid "Branches|Show all branches"
+msgstr "Показувати всі гілки"
+
+msgid "Branches|Show more active branches"
+msgstr "Показати більше активних гілок"
+
+msgid "Branches|Show more stale branches"
+msgstr "Показати більше застарілих гілок"
+
+msgid "Branches|Show overview of the branches"
+msgstr "Показати опис гілок"
+
+msgid "Branches|Show stale branches"
+msgstr "Показати застарілі гілки"
msgid "Branches|Sort by"
msgstr "Сортувати за"
+msgid "Branches|Stale"
+msgstr "Застарілі"
+
+msgid "Branches|Stale branches"
+msgstr "Застарілі гілки"
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr "Гілка не може бути оновлена автоматично, тому що вона має розбіжності із upstream."
@@ -608,30 +727,45 @@ msgstr "Перегляд файлів"
msgid "Browse files"
msgstr "Перегляд файлів"
+msgid "Business"
+msgstr "Бізнес"
+
msgid "ByAuthor|by"
msgstr "від"
msgid "CI / CD"
msgstr "CI / CD"
+msgid "CI/CD"
+msgstr "CI/CD"
+
msgid "CI/CD configuration"
msgstr "Налаштування CI/CD"
+msgid "CI/CD for external repo"
+msgstr "CI/CD для зовнішнього репозиторія"
+
msgid "CICD|Jobs"
msgstr "Завдання"
msgid "Cancel"
msgstr "Скасувати"
-msgid "Cancel edit"
-msgstr "Відмінити правку"
+msgid "Cannot be merged automatically"
+msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr "Неможливо змінити керований кластер Kubernetes"
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr "Вага зміни"
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Вибрати в гілці"
@@ -651,7 +785,7 @@ msgid "Changelog"
msgstr "Список змін"
msgid "Changes are shown as if the source revision was being merged into the target revision."
-msgstr ""
+msgstr "Зміни відображаються так, ніби редакція-джерело була злита в цільову редакцію."
msgid "Charts"
msgstr "Графіки"
@@ -686,6 +820,12 @@ msgstr "Виберіть файл..."
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr "Виберіть групи для синхронізації на цей вторинний вузол."
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr "Виберіть, які репозиторії ви хочете підключити і запустити конвеєри CI/CD."
+
+msgid "Choose which repositories you want to import."
+msgstr "Виберіть, які репозиторії ви хочете імпортувати."
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "Виберіть сегменти для синхронізації на цей вторинний вузол."
@@ -788,6 +928,15 @@ msgstr "Натисніть кнопку нижче, щоб розпочати п
msgid "Click to expand text"
msgstr "Натисніть, щоб розгорнути текст"
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr "Клонувати репозиторій"
@@ -834,7 +983,7 @@ msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with Gi
msgstr "Керуйте способом інтеграції вашого Kubernetes-кластера з GitLab"
msgid "ClusterIntegration|Copy API URL"
-msgstr "Скопіювати URL API"
+msgstr "Скопіювати API URL"
msgid "ClusterIntegration|Copy CA Certificate"
msgstr "Скопіювати сертифікат центру сертифікації"
@@ -887,6 +1036,9 @@ msgstr "Проект Google Kubernetes Engine"
msgid "ClusterIntegration|Helm Tiller"
msgstr "Helm Tiller"
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr "Для того, щоб показувати стан кластера, нам потрібно буде встановити Prometheus на ваш кластер для збору необхідних даних."
+
msgid "ClusterIntegration|Ingress"
msgstr "Ingress"
@@ -896,6 +1048,9 @@ msgstr "Ingress IP-адреса"
msgid "ClusterIntegration|Install"
msgstr "Встановити"
+msgid "ClusterIntegration|Install Prometheus"
+msgstr "Встановити Prometheus"
+
msgid "ClusterIntegration|Installed"
msgstr "Встановлений"
@@ -914,6 +1069,9 @@ msgstr "Kubernetes-кластер"
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr "Параметри Kubernetes-кластера"
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr "Стан Kubernetes-кластера"
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr "Інтеграція із Kubernetes-кластером"
@@ -947,6 +1105,9 @@ msgstr "Дізнайтеся більше про %{link_to_documentation}"
msgid "ClusterIntegration|Learn more about environments"
msgstr "Дізнайтеся більше про середовища"
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr "Дізнайтеся більше про конфігурацію безпеки"
+
msgid "ClusterIntegration|Machine type"
msgstr "Тип машини"
@@ -1007,6 +1168,9 @@ msgstr "Запит про початок встановлення не вико
msgid "ClusterIntegration|Save changes"
msgstr "Зберегти зміни"
+msgid "ClusterIntegration|Security"
+msgstr "Безпека"
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr "Переглянути та редагувати параметри вашого Kubernetes-кластера"
@@ -1034,6 +1198,9 @@ msgstr "Помилка при створенні вашого Kubernetes-кла
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr "Під час встановлення %{title} сталася помилка"
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr "Стандартна конфігурація кластера надає доступ до широкого набору функцій, необхідних для успішного створення та розгортання застосунків-контейнерів."
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr "Цей обліковий запис повинен мати наступні права для створення Kubernetes-кластера в %{link_to_container_project}"
@@ -1080,10 +1247,10 @@ msgid "Collapse"
msgstr "Згорнути"
msgid "Comment and resolve discussion"
-msgstr ""
+msgstr "Залишити коментар і завершити обговорення"
msgid "Comment and unresolve discussion"
-msgstr ""
+msgstr "Залишити коментар і повторно відкрити обговорення"
msgid "Comments"
msgstr "Коментарі"
@@ -1162,6 +1329,12 @@ msgstr "Порівняти Git-редакції"
msgid "Compare Revisions"
msgstr "Порівняння редакцій"
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr "%{source_branch} і %{target_branch} однакові."
@@ -1177,9 +1350,45 @@ msgstr "Ціль"
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr "Конфіденційність"
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr "Підключити"
+
+msgid "Connect all repositories"
+msgstr "Підключити всі репозиторії"
+
+msgid "Connect repositories from GitHub"
+msgstr "Підключити репозиторії з GitHub"
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr "Підключіть ваші зовнішні репозиторії, і CI/CD конвеєри будуть запускатися для нових комітів. Створений GitLab-проект буде мати лише CI/CD фунції."
+
+msgid "Connecting..."
+msgstr "З'єднання..."
+
msgid "Container Registry"
msgstr "Реєстр Контейнерів"
@@ -1225,6 +1434,12 @@ msgstr "Використовуйте різні імена образів"
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr "За допомогою вбудованого в GitLab реєстру Docker контейнерів кожен проект може мати власне місце для зберігання Docker образів."
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr "Внесок"
+
msgid "Contribution guide"
msgstr "Інструкція для учасників"
@@ -1288,8 +1503,8 @@ msgstr "Створити гілку"
msgid "Create directory"
msgstr "Створити каталог"
-msgid "Create empty bare repository"
-msgstr "Створити порожній репозиторій"
+msgid "Create empty repository"
+msgstr ""
msgid "Create epic"
msgstr "Створити епік"
@@ -1297,6 +1512,9 @@ msgstr "Створити епік"
msgid "Create file"
msgstr "Створити файл"
+msgid "Create group label"
+msgstr "Створити мітку групи"
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr "Створити список на остнові міток. В ньому будуть проблеми з такими мітками."
@@ -1321,6 +1539,9 @@ msgstr "Створити нову мітку"
msgid "Create new..."
msgstr "Створити..."
+msgid "Create project label"
+msgstr "Створити мітку проекту"
+
msgid "CreateNewFork|Fork"
msgstr "Форк"
@@ -1354,6 +1575,9 @@ msgstr "Користувацькі налаштування повідомлен
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "Спеціальні рівні повідомлення співпадають з рівнем участі. За допомогою спеціальних рівнів сповіщень ви також отримуватимете сповіщення про вибрані події. Щоб дізнатись більше, перегляньте %{notification_link}."
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr "Аналіз циклу"
@@ -1391,7 +1615,7 @@ msgid "December"
msgstr "грудень"
msgid "Default classification label"
-msgstr ""
+msgstr "Мітка класифікації за замовчуванням"
msgid "Define a custom pattern with cron syntax"
msgstr "Визначте власний шаблон за допомогою синтаксису cron"
@@ -1437,11 +1661,17 @@ msgid "Dismiss Cycle Analytics introduction box"
msgstr "Відмінити блок вступу до Аналитики Циклу"
msgid "Dismiss Merge Request promotion"
-msgstr "Відхилити рекламу для Запитів на злиття"
+msgstr "Вимкнути рекламу для Запитів на злиття"
+
+msgid "Documentation for popular identity providers"
+msgstr ""
msgid "Don't show again"
msgstr "Не показувати знову"
+msgid "Done"
+msgstr "Готово"
+
msgid "Download"
msgstr "Завантажити"
@@ -1469,9 +1699,15 @@ msgstr "Просте порівняння (diff)"
msgid "DownloadSource|Download"
msgstr "Завантажити"
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr "Запланована дата завершення"
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr "Редагувати"
@@ -1479,6 +1715,18 @@ msgid "Edit Pipeline Schedule %{id}"
msgstr "Редагувати Розклад Конвеєра %{id}"
msgid "Edit files in the editor and commit changes here"
+msgstr "Редагуйте файли в редакторі і закомітьте зміни тут"
+
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
msgstr ""
msgid "Emails"
@@ -1490,6 +1738,33 @@ msgstr "Увімкнути"
msgid "Enable Auto DevOps"
msgstr "Увімкнути Auto DevOps"
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr "Виникла помилка при завантаженні середовищ."
@@ -1550,11 +1825,14 @@ msgstr "План-графік епіків"
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Епіки дозволяють керувати вашим портфелем проектів ефективніше та з меншими зусиллями"
-msgid "Error checking branch data. Please try again."
+msgid "Error Reporting and Logging"
msgstr ""
+msgid "Error checking branch data. Please try again."
+msgstr "Помилка при отриманні даних гілки. Будь ласка, спробуйте пізніше."
+
msgid "Error committing changes. Please try again."
-msgstr ""
+msgstr "Помилка при коміті змін. Будь ласка, спробуйте пізніше."
msgid "Error creating epic"
msgstr "Помилка при створенні епіку"
@@ -1566,13 +1844,13 @@ msgid "Error fetching labels."
msgstr "Помилка завантаження міток."
msgid "Error fetching network graph."
-msgstr ""
+msgstr "Помилка при отриманні графа мережі."
msgid "Error fetching refs"
-msgstr ""
+msgstr "Помилка завантаження refs"
msgid "Error fetching usage ping data."
-msgstr ""
+msgstr "Помилка при отриманні данних по перевірці з’єднання."
msgid "Error occurred when toggling the notification subscription"
msgstr "Сталася помилка під час підключення підписки на сповіщення"
@@ -1623,22 +1901,31 @@ msgid "Explore public groups"
msgstr "Переглянути публічні групи"
msgid "External Classification Policy Authorization"
+msgstr "Авторизація відповідно до зовнішньої політики"
+
+msgid "External authentication"
msgstr ""
msgid "External authorization denied access to this project"
+msgstr "Зовнішня авторизація заборонила доступ до цього проекту"
+
+msgid "External authorization request timeout"
msgstr ""
msgid "ExternalAuthorizationService|Classification Label"
-msgstr ""
+msgstr "Мітка класифікації"
msgid "ExternalAuthorizationService|Classification label"
-msgstr ""
+msgstr "Мітка класифікації"
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
-msgstr ""
+msgstr "Якщо класифікаційну мітку не встановлено, використовуватиметься стандартна мітка `%{default_label}`."
+
+msgid "Failed"
+msgstr "Невдало"
msgid "Failed Jobs"
-msgstr "Невдалі Завдання"
+msgstr ""
msgid "Failed to change the owner"
msgstr "Не вдалося змінити власника"
@@ -1670,6 +1957,9 @@ msgstr "Файли"
msgid "Files (%{human_size})"
msgstr "Файли (%{human_size})"
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr "Фільтрувати за коміт-повідомленням"
@@ -1679,12 +1969,21 @@ msgstr "Пошук по шляху"
msgid "Find file"
msgstr "Знайти файл"
+msgid "Finished"
+msgstr "Завершено"
+
msgid "FirstPushedBy|First"
msgstr "Перший"
msgid "FirstPushedBy|pushed by"
msgstr "відправлено"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] "Форк"
@@ -1698,9 +1997,15 @@ msgstr "Форк від"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr "Форк із %{project_name} (видалено)"
+msgid "Forking in progress"
+msgstr "Відбувається створення форку"
+
msgid "Format"
msgstr "Формат"
+msgid "From %{provider_title}"
+msgstr "З %{provider_title}"
+
msgid "From issue creation until deploy to production"
msgstr "З моменту створення проблеми до розгортання на production"
@@ -1708,7 +2013,7 @@ msgid "From merge request merge until deploy to production"
msgstr "Від виконання запиту на злиття до розгортання на production"
msgid "From the Kubernetes cluster details view, install Runner from the applications list"
-msgstr ""
+msgstr "Із сторінки деталей Kubernetes-кластера, встановіть runner зі списку застосунків"
msgid "GPG Keys"
msgstr "GPG ключі"
@@ -1719,12 +2024,18 @@ msgstr "Створити стандартний набір міткок"
msgid "Geo Nodes"
msgstr "Гео-Вузли"
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "Вузол не працює або зламаний."
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr "Вузол працює повільно, перевантажений або тільки що відновився після збою."
+msgid "GeoNodes|Checksummed"
+msgstr "Із контрольною сумою"
+
msgid "GeoNodes|Database replication lag:"
msgstr "Затримка реплікації бази даних:"
@@ -1770,21 +2081,48 @@ msgstr "Артефакти локальних завдань:"
msgid "GeoNodes|New node"
msgstr "Новий вузол"
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr "Аутентифікацію вузла успішно полагоджено."
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr "Вузол успішно видалено."
+
+msgid "GeoNodes|Not checksummed"
+msgstr "Без контрольної суми"
+
msgid "GeoNodes|Out of sync"
msgstr "Розсинхронізовані"
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr "Видалення вузла зупиняє процес синхронізації. Ви впевнені?"
+
msgid "GeoNodes|Replication slot WAL:"
msgstr "Слот реплікації WAL:"
msgid "GeoNodes|Replication slots:"
msgstr "Слоти реплікації:"
+msgid "GeoNodes|Repositories checksummed:"
+msgstr "Репозиторії із контрольними сумами:"
+
msgid "GeoNodes|Repositories:"
msgstr "Репозиторії:"
+msgid "GeoNodes|Repository checksums verified:"
+msgstr "Репозиторії із підтвердженою контрольною сумою:"
+
msgid "GeoNodes|Selective"
msgstr "Вибіркові"
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr "Проблема при зміні статуса вузла"
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr "Проблема при видаленні вузла"
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr "Проблема при полагодженні вузла"
+
msgid "GeoNodes|Storage config:"
msgstr "Конфігурація сховища:"
@@ -1797,9 +2135,21 @@ msgstr "Синхронізовано"
msgid "GeoNodes|Unused slots"
msgstr "Невикористані слоти"
+msgid "GeoNodes|Unverified"
+msgstr "Непідтверджені"
+
msgid "GeoNodes|Used slots"
msgstr "Використані слоти"
+msgid "GeoNodes|Verified"
+msgstr "Підтверджені"
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr "Wiki репозиторії із підтвердженою контрольною сумою:"
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr "Wiki із контрольною сумою:"
+
msgid "GeoNodes|Wikis:"
msgstr "Wiki:"
@@ -1830,6 +2180,9 @@ msgstr "Виберіть групи для реплікації."
msgid "Geo|Shards to synchronize"
msgstr "Сегменти для синхронізації"
+msgid "Git repository URL"
+msgstr "URL Git-репозиторія"
+
msgid "Git revision"
msgstr "Git-редакція"
@@ -1839,12 +2192,30 @@ msgstr "Інформація про статус зберігання Git бул
msgid "Git version"
msgstr "Git-версія"
+msgid "GitHub import"
+msgstr "GitHub-імпорт"
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr "Розділ GitLab Runner"
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr "Сервери Gitaly"
+msgid "Go back"
+msgstr "Повернутися"
+
msgid "Go to your fork"
msgstr "Перейти до вашого форку"
@@ -1911,9 +2282,6 @@ msgstr "Групи не знайдені"
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr "Ви можете керувати правами доступу членів групи мати доступ до кожного проекту в ній."
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr "Ви впевнені, що хочете залишити групу \"${group.fullName}\"?"
-
msgid "GroupsTree|Create a project in this group."
msgstr "Створити проект у групі."
@@ -1944,6 +2312,9 @@ msgstr "На жаль жодна группа чи проект не задов
msgid "Have your users email"
msgstr "Електронна пошта для звертань користувачів"
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr "Перевірка Працездатності"
@@ -1962,6 +2333,15 @@ msgstr "Проблем із здоров'ям не виявлено"
msgid "HealthCheck|Unhealthy"
msgstr "Нездоровий"
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "Сховати значення"
@@ -1975,12 +2355,39 @@ msgstr "Історія"
msgid "Housekeeping successfully started"
msgstr "Очищення успішно розпочато"
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr "При використанні GitHub, ви побачите статуси конвеєрів для комітів і запитів на злиття. %{more_info_link}"
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr "Якщо у вас уже є файли, ви можете відправити їх за допомогою %{link_to_cli} нижче."
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr "Якщо ваш HTTP-репозиторій не є публічним, додайте дані для аутентифікації до URL: https://username:password@gitlab.company.com/group/project.git."
+
+msgid "Import"
+msgstr "Імпорт"
+
+msgid "Import all repositories"
+msgstr "Імпорт всіх репозиторіїв"
+
+msgid "Import in progress"
+msgstr "Імпорт триває"
+
+msgid "Import repositories from GitHub"
+msgstr "Імпорт репозиторіїв з GitHub"
+
msgid "Import repository"
msgstr "Імпорт репозиторію"
+msgid "ImportButtons|Connect repositories from"
+msgstr "Підключити репозиторії із"
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr "Покращити дошки обговорень проблем за допомогою версії GitLab Enterprise Edition."
@@ -2006,6 +2413,9 @@ msgstr[3] "Інстансів"
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "Цей інстанс не підтримує декілька Kubernetes-кластерів"
+msgid "Integrations"
+msgstr "Інтеграції"
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr "Зацікавлені сторони за бажанням можуть навіть робити внески шляхом відправлення комітів."
@@ -2060,6 +2470,9 @@ msgstr "чер."
msgid "June"
msgstr "червень"
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -2082,7 +2495,7 @@ msgid "Kubernetes configured"
msgstr "Kubernetes налаштовано"
msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new Kubernetes Clusters page"
-msgstr ""
+msgstr "Спосіб Інтеграції Kubernetes як сервіса застарів. %{deprecated_message_content} ваші Kubernetes-кластери за допомогою нової сторінки Кластери Kubernetes"
msgid "LFSStatus|Disabled"
msgstr "Вимкнено"
@@ -2090,12 +2503,30 @@ msgstr "Вимкнено"
msgid "LFSStatus|Enabled"
msgstr "Увімкнено"
+msgid "Label"
+msgstr "Мітка"
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr "%{firstLabelName} + %{remainingLabelCount} ще"
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr "%{labelsString} і %{remainingLabelCount} ще"
+
msgid "Labels"
msgstr "Мітки"
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr "Мітки можуть бути застосовані до %{features}. Групові мітки доступні для будь-якого проекту в межах групи."
+
msgid "Labels can be applied to issues and merge requests to categorize them."
+msgstr "Мітки можуть бути застосовані до проблем та запитів на злиття для їх категоризації."
+
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
msgstr ""
+msgid "Labels|Promote Label"
+msgstr "Підвищити мітку"
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "Останній %d день"
@@ -2157,6 +2588,9 @@ msgstr "Ліцензія"
msgid "List"
msgstr "Список"
+msgid "List your GitHub repositories"
+msgstr "Список ваших репозиторіїв GitHub"
+
msgid "Loading the GitLab IDE..."
msgstr "Завантаження IDE GitLab..."
@@ -2169,9 +2603,6 @@ msgstr "Заблокувати %{issuableDisplayName}"
msgid "Lock not found"
msgstr "Блокування не знайдено"
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr "Заблокувати цю %{issuableDisplayName}? Лише члени проекту зможуть коментувати."
-
msgid "Locked"
msgstr "Заблоковано"
@@ -2187,9 +2618,21 @@ msgstr "Вхід"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "Зробіть кожного учасника команди більш продуктивним незалежно від його місцезнаходження. GitLab Geo створює копії \"тільки для читання\" вашого GitLab сервера, щоб скоротити час для клонування і отримання коду з великих репозиторіїв."
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr "Керування мітками групи"
+
msgid "Manage labels"
msgstr "Керувати мітками"
+msgid "Manage project labels"
+msgstr "Керування мітками проекту"
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr "бер."
@@ -2211,6 +2654,9 @@ msgstr "Медіана"
msgid "Members"
msgstr "Користувачі"
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr "Запити на злиття"
@@ -2221,17 +2667,89 @@ msgid "Merge request"
msgstr "Запит на злиття"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
-msgstr ""
-
-msgid "MergeRequest|Approved"
-msgstr "Затверджено"
+msgstr "Запит на злиття — це спосіб запропонувати свої зміни до проекту і обговорити їх із іншими"
msgid "Merged"
-msgstr "Злиті"
+msgstr "Злито"
msgid "Messages"
msgstr "Повідомлення"
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr "Бізнес"
+
+msgid "Metrics|Create metric"
+msgstr "Створити метрику"
+
+msgid "Metrics|Edit metric"
+msgstr "Редагувати метрику"
+
+msgid "Metrics|For grouping similar metrics"
+msgstr "Для групування подібних метрик"
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr "Назва вертикальної осі графіка. Зазвичай це — одиниці вимірювання. Горизонтальна вісь (вісь X) завжди відображає час."
+
+msgid "Metrics|Legend label (optional)"
+msgstr "Заголовок легенди (необов’язковий)"
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr "Має бути коректним запитом PromQL."
+
+msgid "Metrics|Name"
+msgstr "Ім'я"
+
+msgid "Metrics|New metric"
+msgstr "Нова метрика"
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr "Документація по запитам Prometheus"
+
+msgid "Metrics|Query"
+msgstr "Запит"
+
+msgid "Metrics|Response"
+msgstr "Відповідь"
+
+msgid "Metrics|System"
+msgstr "Система"
+
+msgid "Metrics|Type"
+msgstr "Тип"
+
+msgid "Metrics|Unit label"
+msgstr "Одиниці вимірювання"
+
+msgid "Metrics|Used as a title for the chart"
+msgstr "Використовується як заголовок графіка"
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr "Використовується, якщо запит повертає єдину послідовність. Якщо ж він повертає декілька, їх назви беруться із відповіді."
+
+msgid "Metrics|Y-axis label"
+msgstr "Назва осі Y"
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr "напр. HTTP-запити"
+
+msgid "Metrics|e.g. Requests/second"
+msgstr "напр. запитів/сек"
+
+msgid "Metrics|e.g. Throughput"
+msgstr "напр. пропускна здатність"
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr "напр. rate(http_requests_total[5m])"
+
+msgid "Metrics|e.g. req/sec"
+msgstr "напр. зап/сек"
+
msgid "Milestone"
msgstr "Етап"
@@ -2247,6 +2765,15 @@ msgstr "Не вдалося видалити етап %{milestoneTitle}"
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr "Етап %{milestoneTitle} не знайдено"
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr "Підвищити %{milestoneTitle} до групового етапу?"
+
+msgid "Milestones|Promote Milestone"
+msgstr "Підвищити Етап"
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "не додасте SSH ключ"
@@ -2259,6 +2786,9 @@ msgstr "Закрити"
msgid "Monitoring"
msgstr "Моніторинг"
+msgid "More info"
+msgstr "Детальніше"
+
msgid "More information"
msgstr "Детальніше"
@@ -2335,6 +2865,9 @@ msgstr "Нова підгрупа"
msgid "New tag"
msgstr "Новий тег"
+msgid "No Label"
+msgstr "Без Мітки"
+
msgid "No assignee"
msgstr "Немає виконавця"
@@ -2342,7 +2875,7 @@ msgid "No changes"
msgstr "Немає змін"
msgid "No connection could be made to a Gitaly Server, please check your logs!"
-msgstr ""
+msgstr "Неможливо з'єднатись із сервером Gitaly, будь ласка, перевірте логи!"
msgid "No due date"
msgstr "Немає"
@@ -2353,6 +2886,9 @@ msgstr "Немає запланованого або витраченого ча
msgid "No file chosen"
msgstr "Файл не вибрано"
+msgid "No labels created yet."
+msgstr "Мітки ще не створені."
+
msgid "No repository"
msgstr "Немає репозиторію"
@@ -2368,6 +2904,12 @@ msgstr "Злиття не допускається"
msgid "Not available"
msgstr "Недоступний"
+msgid "Not available for private projects"
+msgstr "Недоступно для приватних проектів"
+
+msgid "Not available for protected branches"
+msgstr "Недоступно для захищених гілок"
+
msgid "Not confidential"
msgstr "Не конфіденційно"
@@ -2377,6 +2919,18 @@ msgstr "Недостатньо даних"
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr "Майте на увазі, що гілка master захищена автоматично. %{link_to_protected_branches}"
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr "Примітка: як адміністратор ви можете налаштувати %{github_integration_link}, що дозволить входити через GitHub і підключати репозиторії без створення особистого токену доступу."
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr "Примітка: як адміністратор ви можете налаштувати %{github_integration_link}, що дозволить входити через GitHub і імпортувати репозиторії без створення особистого токену доступу."
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr "Примітка: зверніться до вашого адміністратора GitLab, щоб налаштувати %{github_integration_link}, який дозволить входити за допомогою GitHub і приєднувати репозиторії без генерації персонального токена доступу."
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr "Примітка: зверніться до вашого адміністратора GitLab, щоб налаштувати %{github_integration_link}, який дозволить входити за допомогою GitHub та імпортувати репозиторії без генерації персонального токена доступу."
+
msgid "Notification events"
msgstr "Повідомлення про події"
@@ -2461,6 +3015,12 @@ msgstr "жовтень"
msgid "OfSearchInADropdown|Filter"
msgstr "Фільтр"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr "Після імпорту репозиторії можуть бути віддзеркалені через SSH. Дізнайтеся більше %{ssh_link}"
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr "Тільки учасники проекту можуть залишати коментарі."
@@ -2482,12 +3042,18 @@ msgstr "Параметри"
msgid "Otherwise it is recommended you start with one of the options below."
msgstr "В іншому разі рекомендується почати з одного з наведених нижче варіантів."
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr "Огляд"
msgid "Owner"
msgstr "Власник"
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr "Остання »"
@@ -2500,9 +3066,21 @@ msgstr "Попередня"
msgid "Pagination|« First"
msgstr "« Перша"
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr "Пароль"
+msgid "Pending"
+msgstr "В очікуванні"
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr "Токену персонального доступу"
+
msgid "Pipeline"
msgstr "Конвеєр"
@@ -2582,10 +3160,37 @@ msgid "Pipelines for last year"
msgstr "Конвеєри за останній рік"
msgid "Pipelines|Build with confidence"
-msgstr ""
+msgstr "Виконуйте збірки із впевненістю"
+
+msgid "Pipelines|CI Lint"
+msgstr "Перевірка конфігурації (CI Lint)"
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr "Очистити кеш Runner'ів"
msgid "Pipelines|Get started with Pipelines"
-msgstr "Початок роботи з Конвеєрами"
+msgstr "Розпочати роботу з Конвеєрами"
+
+msgid "Pipelines|Loading Pipelines"
+msgstr "Завантаження конвеєрів"
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr "Кеш проекту успішно очищено."
+
+msgid "Pipelines|Run Pipeline"
+msgstr "Запустити Конвеєр"
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr "Помилка при очищенні кеша runner'ів."
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr "В даний час немає %{scope} конвеєрів."
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr "В даний час немає конвеєрів."
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr "Цей проект в даний час не налаштований для запуску конвеєрів."
msgid "Pipeline|Retry pipeline"
msgstr "Перезапустити конвеєр"
@@ -2617,15 +3222,24 @@ msgstr "зі стадією"
msgid "Pipeline|with stages"
msgstr "зі стадіями"
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr "Відтворити"
msgid "Please enable billing for one of your projects to be able to create a Kubernetes cluster, then try again."
-msgstr ""
+msgstr "Будь ласка, увімкніть білінга для одного з ваших проектів, щоб мати можливість створити Kubernetes-кластер, і повторіть спробу."
msgid "Please solve the reCAPTCHA"
msgstr "Будь ласка, пройдіть reCAPTCHA"
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr "Будь ласка, почекайте поки ми з’єднуємося із вашим репозиторієм. Оновлюйте сторінку за бажанням."
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr "Будь ласка, почекайте поки ми імпортуємо ваш репозиторій. Оновлюйте сторінку за бажанням."
+
msgid "Preferences"
msgstr "Налаштування"
@@ -2639,7 +3253,7 @@ msgid "Private - The group and its projects can only be viewed by members."
msgstr "Приватна — цю групу та її проекти можуть бачити тільки її користувачі."
msgid "Private projects can be created in your personal namespace with:"
-msgstr ""
+msgstr "Приватні проекти можуть бути створені у вашому персональному просторі імен з:"
msgid "Profile"
msgstr "Профіль"
@@ -2680,6 +3294,9 @@ msgstr "Ваш обліковий запис є власником в цих г
msgid "Profiles|your account"
msgstr "ваш обліковий запис"
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr "Мови програмування, що використовується в цьому репозиторії"
@@ -2704,9 +3321,6 @@ msgstr "Аватар проекту"
msgid "Project avatar in repository: %{link}"
msgstr "Аватар проекту в репозиторії: %{link}"
-msgid "Project cache successfully reset."
-msgstr "Кеш проекту успішно скинуто."
-
msgid "Project details"
msgstr "Деталі проекту"
@@ -2803,6 +3417,12 @@ msgstr "На жаль, по вашоу запиту проектів не зна
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Ця функція потребує підтримки localStorage вашим браузером"
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr "було знайдено %{exporters} з %{metrics}"
+
+msgid "PrometheusService|
"
+
msgid "PrometheusService|Active"
msgstr "Активний"
@@ -2815,9 +3435,21 @@ msgstr "Автоматично розгортайте та налаштовуй
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr "За замовчуванням, Prometheus запускається за адресою ‘http://localhost:9090’. Не рекомендується змінювати цю адресу і порт, бо це може призвести до конфлікту з іншими сервісами запущеними на GitLab сервері."
+msgid "PrometheusService|Common metrics"
+msgstr "Загальні метрики"
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr "Загальні метрики автоматично збираються на основі набору метрик від популярних експортерів."
+
+msgid "PrometheusService|Custom metrics"
+msgstr "Власні метрики"
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr "Пошук та налаштування метрик..."
+msgid "PrometheusService|Finding custom metrics..."
+msgstr "Пошук власних метрик..."
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr "Встановити Prometheus на кластери"
@@ -2830,20 +3462,14 @@ msgstr "Ручні налаштування"
msgid "PrometheusService|Metrics"
msgstr "Метрики"
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr "Метрики автоматично налаштовуються та контролюються на основі набору метрик від популярних експортерів."
-
msgid "PrometheusService|Missing environment variable"
msgstr "Пропущена змінна середовища"
-msgid "PrometheusService|Monitored"
-msgstr "Моніторинг підключено"
-
msgid "PrometheusService|More information"
msgstr "Додаткова інформація"
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
-msgstr "Жодні метрики не відслідковуються. Для початку моніторингу, розгорніть середовище."
+msgid "PrometheusService|New metric"
+msgstr "Нова метрика"
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Базова адреса Prometheus API, наприклад http://prometheus.example.com/"
@@ -2851,6 +3477,9 @@ msgstr "Базова адреса Prometheus API, наприклад http://prom
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr "Prometheus автоматично налаштований на ваших кластерах"
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr "Ці метрики будуть збиратися тільки після першого розгортання в якомусь серидовищі"
+
msgid "PrometheusService|Time-series monitoring service"
msgstr "Сервіс моніторингу часових рядів"
@@ -2860,8 +3489,17 @@ msgstr "Для можливості ручного налаштування, в
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr "Для можливості встановлення Prometheus на ваші кластери, деактивуйте ручні налаштування нижче"
-msgid "PrometheusService|View environments"
-msgstr "Перегляд середовищ"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr "Очікування першого розгортання у серидовищі для збору загальних метрик"
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr "Перенести мітку на рівень групи"
+
+msgid "Promote to Group Milestone"
+msgstr ""
msgid "Protip:"
msgstr "Підказка:"
@@ -2896,6 +3534,9 @@ msgstr "Докладніше"
msgid "Readme"
msgstr "Інструкція"
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "Гілки"
@@ -2929,6 +3570,9 @@ msgstr "Пов'язані запити на злиття"
msgid "Related Merged Requests"
msgstr "Пов'язані виконані запити"
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr "Нагадати пізніше"
@@ -2944,12 +3588,24 @@ msgstr "Видалити проект"
msgid "Repair authentication"
msgstr "Відновити аутентифікацію"
+msgid "Repo by URL"
+msgstr "Репозиторії по URL"
+
msgid "Repository"
msgstr "Репозиторій"
msgid "Repository has no locks."
msgstr "Репозиторій не має блокувань."
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr "Запит доступу"
@@ -2960,10 +3616,13 @@ msgid "Reset health check access token"
msgstr "Оновити токен доступу для перевірки працездатності"
msgid "Reset runners registration token"
-msgstr "Скинути реєстраційний токен runner-ів"
+msgstr "Перегенерувати реєстраційний токен runner-ів"
msgid "Resolve discussion"
-msgstr ""
+msgstr "Завершити обговорення"
+
+msgid "Response"
+msgstr "Відповідь"
msgid "Reveal value"
msgid_plural "Reveal values"
@@ -2978,9 +3637,36 @@ msgstr "Анулювати цей коміт"
msgid "Revert this merge request"
msgstr "Анулювати цей запит на злиття"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr "План-графік"
+msgid "Run CI/CD pipelines for external repositories"
+msgstr "Запустити CI/CD конвеєри для зовнішніх репозиторіїв"
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr "Виконується"
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr "Ключі SSH"
@@ -2996,6 +3682,9 @@ msgstr "Зберегти змінні"
msgid "Schedule a new pipeline"
msgstr "Розклад нового конвеєра"
+msgid "Scheduled"
+msgstr "Заплановано"
+
msgid "Schedules"
msgstr "Розклади"
@@ -3005,6 +3694,9 @@ msgstr "Планування конвеєрів"
msgid "Scoped issue boards"
msgstr "Тематичні дошки проблем"
+msgid "Search"
+msgstr "Пошук"
+
msgid "Search branches and tags"
msgstr "Пошук гілок та тегів"
@@ -3068,15 +3760,33 @@ msgstr "Шаблони сервісів"
msgid "Service URL"
msgstr "Сервіс URL"
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "Встановіть пароль для свого облікового запису, щоб мати можливість відправляти та отримувати через %{protocol}."
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "Налаштування CI/CD"
msgid "Set up Koding"
msgstr "Налаштування Koding"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "встановити пароль"
@@ -3086,14 +3796,17 @@ msgstr "Налаштування"
msgid "Setup a specific Runner automatically"
msgstr ""
-msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
msgstr ""
+msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
+msgstr "При обнуленні хвилин конвеєрів для цього простору імен, кількість вже використаних хвилин буде дорівнювати 0."
+
msgid "SharedRunnersMinutesSettings|Reset pipeline minutes"
-msgstr "Скинути хвилини в конвеєрі"
+msgstr "Обнулити хвилини в конвеєрі"
msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes"
-msgstr ""
+msgstr "Обнулити використані хвилини в конвеєрі"
msgid "Show command"
msgstr "Показати команду"
@@ -3123,6 +3836,18 @@ msgstr "Немає"
msgid "Sidebar|Weight"
msgstr "Вага"
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr "Сніпети"
@@ -3130,18 +3855,12 @@ msgid "Something went wrong on our end"
msgstr "Щось пішло не так з нашого боку"
msgid "Something went wrong on our end."
-msgstr "Щось пішло не так з нашого боку"
-
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr "Помилка при зміні конфіденційності цієї проблеми"
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr "Щось пішло не так, при спробі зміни стану блокування ${this.issuableDisplayName}"
+msgstr ""
msgid "Something went wrong when toggling the button"
msgstr "Помилка при перемиканні кнопки"
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3153,12 +3872,6 @@ msgstr "Щось пішло не так під час отримання про
msgid "Something went wrong while fetching the registry list."
msgstr "Щось пішло не так при отриманні списку із реєстру."
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr "Щось пішло не так. Будь ласка спробуйте ще раз."
@@ -3276,12 +3989,21 @@ msgstr "Джерело недоступне"
msgid "Spam Logs"
msgstr "Спам-журнал"
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr "Зазначте наступний URL під час встановлення Runner-а:"
msgid "StarProject|Star"
msgstr "В обрані"
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr "Обрані проекти"
@@ -3291,6 +4013,15 @@ msgstr "Почати %{new_merge_request} з цими змінами"
msgid "Start the Runner!"
msgstr "Запустіть Runner!"
+msgid "Started"
+msgstr "Запущений"
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr "Статус"
+
msgid "Stopped"
msgstr "Зупинено"
@@ -3303,9 +4034,15 @@ msgstr "Підгрупи"
msgid "Switch branch/tag"
msgstr "Перейти в гілку/тег"
+msgid "System"
+msgstr "Система"
+
msgid "System Hooks"
msgstr "Системні гуки"
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] "Тег (%{tag_count})"
@@ -3388,6 +4125,9 @@ msgstr "захищений"
msgid "Target Branch"
msgstr "Цільова гілка"
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr "Команда"
@@ -3403,17 +4143,26 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
-msgstr "Стадія \"Написання коду\" показує час від першого коміту до створення запиту на злиття. Дані будуть автоматично додані після створення вашого першого запиту на злиття."
+msgstr "Стадія Написання коду показує час від першого коміту до створення запиту на злиття. Дані будуть автоматично додані після створення вашого першого запиту на злиття."
msgid "The collection of events added to the data gathered for that stage."
msgstr "Колекція подій додана до даних, зібраних для цієї стадії."
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr "З’єднання буде припинено після %{timeout}. Для репозиторіїв, яким потрібно більше часу, використовуйте комбінацію clone/push."
+
msgid "The fork relationship has been removed."
msgstr "Зв'язок форку видалено."
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr "Імпорт буде припинено після %{timeout}. Для репозиторіїв, яким потрібно більше часу, використовуйте комбінацію clone/push."
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
-msgstr "Стадія \"Проблема\" показує, скільки часу потрібно від створення проблеми до включення її до якогось етапу, або додавання проблеми на дошку. Почніть створювати проблеми, щоб переглядати дані для цієї стадії."
+msgstr "Стадія Проблема показує, скільки часу потрібно від створення проблеми до включення її до якогось етапу, або додавання проблеми на дошку. Почніть створювати проблеми, щоб переглядати дані для цієї стадії."
msgid "The maximum file size allowed is 200KB."
msgstr "Максимальний розмір файлу — 200 Кб."
@@ -3422,16 +4171,22 @@ msgid "The number of attempts GitLab will make to access a storage."
msgstr "Кількість спроб, які зробить GitLab для отримання доступу до сховища даних."
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
-msgstr "Кількість збоїв після якої Gitlab повністю заблокує доступ до сховища данних. Лічильник кількості збоїв може бути скинутий в інтерфейсі адміністратора (%{link_to_health_page}), або через %{api_documentation_link}."
+msgstr "Кількість збоїв після якої Gitlab повністю заблокує доступ до сховища данних. Лічильник кількості збоїв можна буде обнулити в інтерфейсі адміністратора (%{link_to_health_page}), або через %{api_documentation_link}."
+
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
msgid "The phase of the development lifecycle."
msgstr "Фаза життєвого циклу розробки."
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
-msgstr "Стадія \"Планування\" відображається час від попереднього кроку до першого коміту. Додається автоматично, як тільки відправиться перший коміт."
+msgstr "Стадія Планування відображає час від попереднього кроку до першого коміту. Додається автоматично, як тільки відправиться перший коміт."
+
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
-msgstr "Стадія \"Production\" показує загальний час між створенням проблеми та розгортанням коду у production. Дані будуть автоматично додані після завершення повної ідеї до production циклу."
+msgstr "Стадія Production показує загальний час між створенням проблеми та розгортанням коду у production. Дані будуть автоматично додані після завершення повної ідеї до production циклу."
msgid "The project can be accessed by any logged in user."
msgstr "Доступ до проекту можливий будь-яким зареєстрованим користувачем."
@@ -3445,17 +4200,20 @@ msgstr "Репозиторій для цього проекту не існує.
msgid "The repository for this project is empty"
msgstr "Репозиторій цього проекту порожній"
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr "Репозиторій має бути доступним через http://, https:// або git://."
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
-msgstr "Стадія \"Затвердження\" показує час від створення запиту про об'єднання до його виконання. Дані будуть автоматично додані після завершення першого запиту на злиття."
+msgstr "Стадія Затвердження показує час від створення запиту про об'єднання до його виконання. Дані будуть автоматично додані після завершення першого запиту на злиття."
msgid "The roadmap shows the progress of your epics along a timeline"
msgstr "План-графік показує стан ваших епіків у часі"
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
-msgstr "Стадія \"Staging\" показує час між виконання запиту на злиття та розгортанням коду у production. Дані автоматично додаються після розгортання у production вперше."
+msgstr "Стадія Staging показує час між виконання запиту на злиття та розгортанням коду у production. Дані автоматично додаються після розгортання у production вперше."
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
-msgstr "Стадія \"Тестування\" показує час, який GitLab CI витрачає для виконання кожного конвеєра для відповідного запиту злиття. Дані будуть автоматично додані після завершення першого конвеєра."
+msgstr "Стадія Тестування показує час, який GitLab CI витрачає для виконання кожного конвеєра для відповідного запиту злиття. Дані будуть автоматично додані після завершення першого конвеєра."
msgid "The time in seconds GitLab will keep failure information. When no failures occur during this time, information about the mount is reset."
msgstr "Кількість секунд, протягом якої GitLab зберігає інформацію про збої. Якщо протягом цього періоду жодних збоїв не відбувається, інформація про точку монтування скидається."
@@ -3464,7 +4222,7 @@ msgid "The time in seconds GitLab will try to access storage. After this time a
msgstr "Кількість секунд, протягом якої GitLab намагатиметься отримати доступ до сховища даних. По завершенню цього періоду буде згенерована помилка про перевищення ліміту часу."
msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check."
-msgstr ""
+msgstr "Час у секундах між перевірками сховища. Якщо попередня перевірка іще на завершена, GitLab пропустить наступну."
msgid "The time taken by each data entry gathered by that stage."
msgstr "Час, витрачений на кожен елемент, зібраний на цій стадії."
@@ -3481,6 +4239,9 @@ msgstr "Немає запитів на злиття для відображен
msgid "There are problems accessing Git storage: "
msgstr "Є проблеми з доступом до сховища git: "
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr "Помилка при завантаженні календаря активності користувачів."
@@ -3521,7 +4282,7 @@ msgid "This issue is locked."
msgstr "Ця проблема заблокована."
msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr ""
+msgstr "Це завдання запускається користувачем. Часто вони використовуються для розгортання коду на production"
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "Це завдання залежить від попередніх, які повинні завершитися успішно для його запуску"
@@ -3530,7 +4291,7 @@ msgid "This job has not been triggered yet"
msgstr "Завдання ще не було запущене"
msgid "This job has not started yet"
-msgstr "Ця завдання ще не розпочалася"
+msgstr "Це завдання ще не запустилося"
msgid "This job is in pending state and is waiting to be picked by a runner"
msgstr ""
@@ -3553,6 +4314,9 @@ msgstr "Цей проект"
msgid "This repository"
msgstr "Цей репозиторій"
+msgid "This will delete the custom metric, Are you sure?"
+msgstr "Це призведе до видалення власної метрики, ви впевнені?"
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr "Ці повідомлення електронної пошти автоматично стануть обговореннями проблем, які відображатимуться тут (причому коментарі стануть частиною переписки)."
@@ -3565,6 +4329,12 @@ msgstr "Час до початку роботи над проблемою"
msgid "Time between merge request creation and merge/close"
msgstr "Час між створенням запиту злиття і його виконанням або закриттям"
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr "Відстеження часу"
@@ -3726,6 +4496,36 @@ msgstr "Порада:"
msgid "Title"
msgstr "Назва"
+msgid "To GitLab"
+msgstr "В GitLab"
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr "Для підключення репозиторіїв з GitHub, ви спочатку повинні дозволити Gitlab доступ до списку ваших репозиторіїв на GitHub:"
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr "Для приєднання SVN-репозиторію, перегляньте %{svn_link}."
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr "Для імпорту репозиторіїв з GitHub, ви спочатку повинні дозволити Gitlab доступ до списку ваших репозиторіїв на GitHub:"
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr "Для імпортування SVN-репозиторію, перегляньте %{svn_link}."
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr "Щоб використовувати лише функції CI/CD для зовнішнього репозиторію, виберіть CI/CD для зовнішнього репозиторію."
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr "Для перегляду плану-графіку додайте заплановані дати початку та завершення до одного з ваших епіків у цій групі або її підгрупах. Відображаються лише епіки за попередні та наступні 3 місяці."
@@ -3757,7 +4557,7 @@ msgid "Track groups of issues that share a theme, across projects and milestones
msgstr "Відстежуйте групи проблем зі спільною темою з різних проектів та етапів"
msgid "Track time with quick actions"
-msgstr ""
+msgstr "Відстежуйте час за допомогою швидких дій"
msgid "Trigger this manual action"
msgstr "Запустити цю ручну дію"
@@ -3765,23 +4565,17 @@ msgstr "Запустити цю ручну дію"
msgid "Turn on Service Desk"
msgstr "Ввімкнути Service Desk"
-msgid "Unable to reset project cache."
-msgstr "Неможливо скинуте кеш проекту."
-
msgid "Unknown"
msgstr "Невідомо"
msgid "Unlock"
msgstr "Розблокувати"
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr "Розблокувати %{issuableDisplayName}? Будь-хто зможе залишати коментарі."
-
msgid "Unlocked"
msgstr "Розблоковано"
msgid "Unresolve discussion"
-msgstr ""
+msgstr "Повторно відкрити обговорення"
msgid "Unstar"
msgstr "Видалити із обраних"
@@ -3816,6 +4610,12 @@ msgstr "Завантажити новий аватар"
msgid "UploadLink|click to upload"
msgstr "Натисніть, щоб завантажити"
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr "Використовуйте Service Desk для зв’язку з вашими користувачами (наприклад, щоб запропонувати клієнтську підтримку) через електронну пошту безпосередньо із GitLab"
@@ -3825,24 +4625,51 @@ msgstr "Використовувати токен під час установк
msgid "Use your global notification setting"
msgstr "Використовуються глобальні налаштування повідомлень"
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr "Змінні застосовуються до середовищ через runner. Вони можуть бути захищені, в такому випадку вони доступні тільки для захищених гілок та тегів. Ви можете використовувати змінні для паролів, секретний ключів тощо."
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr "Переглянути та відредагувати рядки"
+
msgid "View epics list"
msgstr "Переглянути список епіків"
msgid "View file @ "
msgstr "Перегляд файла @ "
+msgid "View group labels"
+msgstr "Переглянути мітки групи"
+
msgid "View labels"
msgstr "Переглянути мітки"
msgid "View open merge request"
-msgstr "Перегляд відкритих запитів на злиття"
+msgstr "Переглянути відкритий запит на злиття"
+
+msgid "View project labels"
+msgstr "Переглянути мітки проекту"
msgid "View replaced file @ "
msgstr "Перегляд заміненого файлу @ "
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Внутрішній"
@@ -3859,7 +4686,7 @@ msgid "Want to see the data? Please ask an administrator for access."
msgstr "Хочете побачити дані? Будь ласка, попросить у адміністратора доступ."
msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again."
-msgstr ""
+msgstr "Ми не змогли перевірити, що один із ваших проектів в GCP має ввімкнений білінг. Будь ласка, спробуйте ще раз."
msgid "We don't have enough data to show this stage."
msgstr "Ми не маємо достатньо даних для відображення цієї стадії."
@@ -3870,12 +4697,18 @@ msgstr "Ми хочемо бути впевнені, що це ви, будь л
msgid "Web IDE"
msgstr "Веб-IDE"
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr "Веб-гук дозволяє вам викликати URL якщо, наприклад, був відправлений новий код або створено нову проблему. Ви можете налаштувати його так, щоб він реагував на певні події (відправки коду, проблеми або запити на злиття). Групові веб-гуки застосовуються до всіх проектів в групі і дозволяють вам стандартизувати їх для всієї вашої групи."
msgid "Weight"
msgstr "Вага"
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr "Wiki"
@@ -3898,7 +4731,7 @@ msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beg
msgstr "Порада: Ви можете перемістити цю сторінку, додавши шлях до початку заголовка."
msgid "WikiEdit|There is already a page with the same title in that path."
-msgstr ""
+msgstr "Вже існує сторінка з таким шляхом і заголовком."
msgid "WikiEmptyPageError|You are not allowed to create wiki pages"
msgstr "Ви не можете створювати wiki-сторінки"
@@ -3996,20 +4829,26 @@ msgstr "Напишіть коміт-повідомлення..."
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "Ви хочете видалити %{group_name}. Видалені групи НЕ МОЖНА буду відновити! Ви АБСОЛЮТНО впевнені?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "Ви хочете видалити %{project_name_with_namespace}. Видалений проект НЕ МОЖЕ бути відновлений! Ви АБСОЛЮТНО впевнені?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr "Ви хочете видалити %{project_full_name}. Видалений проект НЕ МОЖЕ бути відновлений! Ви АБСОЛЮТНО впевнені?"
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "Ви збираєтеся видалити зв'язок з форка з вихідним проектом %{forked_from_project}. Ви АБСОЛЮТНО впевнені?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "Ви збираєтеся передати проект %{project_name_with_namespace} іншому власнику. Ви АБСОЛЮТНО впевнені?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr "Ви збираєтеся передати проект %{project_full_name} іншому власнику. Ви АБСОЛЮТНО впевнені?"
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr ""
msgid "You can also create a project from the command line."
msgstr "Ви також можете створити проект із командного рядка."
msgid "You can also star a label to make it a priority label."
-msgstr ""
+msgstr "Ви можете додати мітку в обрані, щоб зробити її пріоритетною."
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "Ви можете легко встановити Runner на кластері Kubernetes. %{link_to_help_page}"
@@ -4077,12 +4916,30 @@ msgstr "Ви не зможете відправляти та отримуват
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "Вам необхідно використовувати різні імена гілок для коректного порівняння."
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr "Інформація про ваш Kubernetes-кластер все ще доступна для редагування на цій сторінці, але ми радимо вимкнути і повторно налаштувати"
-msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
+msgid "Your Projects (default)"
msgstr ""
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr "Ваші зміни можуть бути закомічені до %{branch_name}, оскільки запит на злиття відкритий."
+
+msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
+msgstr "Ваші зміни закомічено. Коміт %{commitId} %{commitStats}"
+
msgid "Your comment will not be visible to the public."
msgstr "Ваш коментар не буде видимим для всіх."
@@ -4095,6 +4952,16 @@ msgstr "Ваше ім'я"
msgid "Your projects"
msgstr "Ваші проекти"
+msgid "among other things"
+msgstr "між іншим"
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "assign yourself"
msgstr "призначити себе"
@@ -4104,12 +4971,30 @@ msgstr "ім'я гілки"
msgid "by"
msgstr "від"
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr "Якість коду"
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr "DAST не виявив попереджень при аналізі цього review app"
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr "Помилка при завантаженні звіту %{reportName}"
@@ -4129,17 +5014,14 @@ msgid "ciReport|No changes to code quality"
msgstr "Немає змін у якості коду"
msgid "ciReport|No changes to performance metrics"
-msgstr ""
+msgstr "Немає змін у показниках продуктивності"
msgid "ciReport|Performance metrics"
-msgstr ""
+msgstr "Показники продуктивності"
msgid "ciReport|SAST"
msgstr "SAST"
-msgid "ciReport|SAST degraded on"
-msgstr "SAST погіршився на"
-
msgid "ciReport|SAST detected"
msgstr "SAST виявив"
@@ -4152,26 +5034,29 @@ msgstr "SAST не виявив жодних вразливостей"
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr "Показати повний звіт про вразливості в коді"
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr "Незатверджені вразливості (червоні) можуть бути відмічені як затверджені. %{helpLink}"
-msgid "ciReport|no security vulnerabilities"
-msgstr "вразливостей немає"
+msgid "ciReport|no vulnerabilities"
+msgstr ""
msgid "command line instructions"
msgstr "інструкції для командного рядка"
-msgid "commit"
-msgstr "коміт"
+msgid "connecting"
+msgstr "з'єднання"
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr "ви вимикаєте конфіденційність. Це означає, що будь-хто зможе бачити і залишати коментарі для цієї проблеми."
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
-msgstr "Ви вмикаєте конфіденційність. Це означає що лише члени команди рівня репортер або вище матимуть змогу бачити та залишати коментарі для цієї проблеми."
+msgid "could not read private key, is the passphrase correct?"
+msgstr ""
msgid "day"
msgid_plural "days"
@@ -4180,7 +5065,33 @@ msgstr[1] "дні"
msgstr[2] "днів"
msgstr[3] "днів"
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
+msgstr "%{slash_command} перезезаписує запланований час останнім значенням."
+
+msgid "here"
+msgstr "тут"
+
+msgid "importing"
+msgstr "імпорт"
+
+msgid "in progress"
msgstr ""
msgid "is invalid because there is downstream lock"
@@ -4189,6 +5100,9 @@ msgstr "неправильний через наявність блокуван
msgid "is invalid because there is upstream lock"
msgstr "неправильний через наявність блокувань на вищих рівнях"
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "заблоковано %{path_lock_user_name} %{created_at}"
@@ -4202,21 +5116,36 @@ msgstr[3] "запитів на злиття"
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "Будь ласка відновіть її або використовуйте іншу %{missingBranchName} гілку"
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr "Додати затвердження"
+msgid "mrWidget|Allows edits from maintainers"
+msgstr "Дозволити редагування командою проекту"
+
msgid "mrWidget|An error occured while removing your approval."
msgstr "Під час видалення вашого затвердження сталася помилка."
msgid "mrWidget|An error occured while retrieving approval data for this merge request."
-msgstr ""
+msgstr "Помилка при отриманні даних про затвердження для цього запиту на злиття."
msgid "mrWidget|An error occured while submitting your approval."
-msgstr ""
+msgstr "Помилка при обробці вашого затвердження."
msgid "mrWidget|Approve"
msgstr "Затвердити"
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4224,7 +5153,7 @@ msgid "mrWidget|Cancel automatic merge"
msgstr "Скасувати автоматичне злиття"
msgid "mrWidget|Check out branch"
-msgstr ""
+msgstr "Перейти в гілку"
msgid "mrWidget|Checking ability to merge automatically"
msgstr "перевірка можливості автоматичного злиття"
@@ -4233,7 +5162,7 @@ msgid "mrWidget|Cherry-pick"
msgstr "вибір (коміта)"
msgid "mrWidget|Cherry-pick this merge request in a new merge request"
-msgstr ""
+msgstr "Вибрати (cherry-pick) цей запит на злиття в новий запит на злиття"
msgid "mrWidget|Closed"
msgstr "Закриті"
@@ -4242,6 +5171,9 @@ msgid "mrWidget|Closed by"
msgstr "Закритий"
msgid "mrWidget|Closes"
+msgstr "Закриває"
+
+msgid "mrWidget|Deployment statistics are not available currently"
msgstr ""
msgid "mrWidget|Did not close"
@@ -4250,12 +5182,18 @@ msgstr "Не закрив"
msgid "mrWidget|Email patches"
msgstr "Email-патчі"
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr "Якщо гілка %{branch} існує у вашому локальному репозиторії, то ви можете застосувати цей запит на злиття вручну за допомогою"
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr "Якщо гілка %{missingBranchName} існує у вашому локальному репозиторії, то ви можете застосувати цей запит на злиття вручну за допомогою командного рядка"
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr "Згадки"
@@ -4340,6 +5278,9 @@ msgstr "Запит на злиття в процесі виконання"
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "Цей проект заархівований, доступ до запису було відключено"
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "Ви можете прийняти цей запит на злиття вручну за допомогою"
@@ -4350,7 +5291,7 @@ msgid "mrWidget|branch does not exist."
msgstr "гілка не існує."
msgid "mrWidget|command line"
-msgstr "командний рядок"
+msgstr "командного рядка"
msgid "mrWidget|into"
msgstr "в"
@@ -4380,6 +5321,9 @@ msgstr "пароль"
msgid "personal access token"
msgstr "особистий токен доступу"
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr "видалити заплановану дату завершення"
@@ -4387,7 +5331,10 @@ msgid "source"
msgstr "джерело"
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
-msgstr ""
+msgstr "%{slash_command} оновлює суму витраченого часу."
+
+msgid "this document"
+msgstr "цей документ"
msgid "to help your contributors communicate effectively!"
msgstr "щоб допомогти учасникам ефективно спілкуватися!"
@@ -4399,5 +5346,5 @@ msgid "uses Kubernetes clusters to deploy your code!"
msgstr "використовує кластери Kubernetes для розгортання коду!"
msgid "with %{additions} additions, %{deletions} deletions."
-msgstr ""
+msgstr "з %{additions} додаваннями і %{deletions} видаленнями."
diff --git a/locale/zh_CN/gitlab.po b/locale/zh_CN/gitlab.po
index 6a43a434cb8..c25e892e568 100644
--- a/locale/zh_CN/gitlab.po
+++ b/locale/zh_CN/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:21-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:36-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -17,7 +17,7 @@ msgstr ""
"X-Crowdin-File: /master/locale/gitlab.pot\n"
msgid " and"
-msgstr ""
+msgstr " 和"
msgid "%d commit"
msgid_plural "%d commits"
@@ -25,11 +25,15 @@ msgstr[0] "%d 次提交"
msgid "%d commit behind"
msgid_plural "%d commits behind"
-msgstr[0] ""
+msgstr[0] "落后 %d 个提交"
+
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] "%d 导出器"
msgid "%d issue"
msgid_plural "%d issues"
-msgstr[0] ""
+msgstr[0] "%d 个议题"
msgid "%d layer"
msgid_plural "%d layers"
@@ -37,24 +41,31 @@ msgstr[0] "%d 层"
msgid "%d merge request"
msgid_plural "%d merge requests"
-msgstr[0] ""
+msgstr[0] "%d 个合并请求"
+
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] "%d 指标"
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] "为提高页面加载速度及性能,已省略了 %s 次提交。"
msgid "%{actionText} & %{openOrClose} %{noteable}"
-msgstr ""
+msgstr "%{actionText} & %{openOrClose} %{noteable}"
msgid "%{commit_author_link} authored %{commit_timeago}"
-msgstr ""
+msgstr "由 %{commit_author_link} 提交于 %{commit_timeago}"
msgid "%{count} participant"
msgid_plural "%{count} participants"
msgstr[0] "%{count} 位参与者"
+msgid "%{loadingIcon} Started"
+msgstr "%{loadingIcon} 已开始"
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
-msgstr ""
+msgstr "%{lock_path} 被GitLab用户 %{lock_user_id} 锁定"
msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
msgstr "%{number_commits_behind} 个落后 %{default_branch} 分支的提交, %{number_commits_ahead} 早超前的提交"
@@ -66,7 +77,7 @@ msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not re
msgstr "已失败 %{number_of_failures} 次/最多允许失败 %{maximum_failures} 次,GitLab 不会继续自动重试。请在问题解决后重置存储健康信息。"
msgid "%{openOrClose} %{noteable}"
-msgstr ""
+msgstr "%{openOrClose} %{noteable}"
msgid "%{storage_name}: failed storage access attempt on host:"
msgid_plural "%{storage_name}: %{failed_attempts} failed storage access attempts:"
@@ -94,15 +105,30 @@ msgstr "最高贡献"
msgid "2FA enabled"
msgstr "启用两步验证"
+msgid "Removes source branch"
+msgstr "删除源分支"
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "持续集成数据图"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr "将在派生(fork)项目中中创建一个新的分支, 并开启一个新的合并请求。"
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr "项目可以用于存放文件(仓库),安排计划(议题),并发布文档(wiki), %{among_other_things_link}。"
+
+msgid "A user with write access to the source branch selected this option"
+msgstr "具有对源分支的写入权限的用户选择了此选项"
+
msgid "About auto deploy"
msgstr "关于自动部署"
msgid "Abuse Reports"
msgstr "滥用报告"
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr "访问令牌"
@@ -112,6 +138,9 @@ msgstr "为方便修复挂载问题,访问故障存储已被暂时禁用。在
msgid "Account"
msgstr "帐号"
+msgid "Account and limit settings"
+msgstr "帐户和限制设置"
+
msgid "Active"
msgstr "启用"
@@ -131,73 +160,73 @@ msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "添加组Webhooks和GitLab企业版。"
msgid "Add Kubernetes cluster"
-msgstr ""
+msgstr "添加 Kubernetes 集群"
msgid "Add License"
msgstr "添加许可证"
msgid "Add Readme"
-msgstr ""
+msgstr "添加自述文件"
msgid "Add new directory"
msgstr "添加目录"
msgid "Add todo"
-msgstr ""
+msgstr "添加待办事项"
msgid "AdminArea|Stop all jobs"
-msgstr ""
+msgstr "停止所有作业"
msgid "AdminArea|Stop all jobs?"
-msgstr ""
+msgstr "停止所有作业吗?"
msgid "AdminArea|Stop jobs"
-msgstr ""
+msgstr "停止作业"
msgid "AdminArea|Stopping jobs failed"
-msgstr ""
+msgstr "停止作业失败"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
-msgstr ""
+msgstr "您即将停止所有作业。所有正在运行的都会被停止。"
msgid "AdminHealthPageLink|health page"
msgstr "健康页面"
msgid "AdminProjects|Delete"
-msgstr ""
+msgstr "删除"
msgid "AdminProjects|Delete Project %{projectName}?"
-msgstr ""
+msgstr "删除项目 %{projectName}?"
msgid "AdminProjects|Delete project"
-msgstr ""
+msgstr "删除项目"
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
-msgstr ""
+msgstr "为每个项目的自动审阅应用 (Auto Review Apps) 和自动部署 (Auto Deploy) 阶段指定一个默认使用的域。"
msgid "AdminUsers|Block user"
-msgstr ""
+msgstr "禁用用户"
msgid "AdminUsers|Delete User %{username} and contributions?"
-msgstr ""
+msgstr "删除用户 %{username} 以及相关贡献吗?"
msgid "AdminUsers|Delete User %{username}?"
-msgstr ""
+msgstr "删除用户 %{username}?"
msgid "AdminUsers|Delete user"
-msgstr ""
+msgstr "删除用户"
msgid "AdminUsers|Delete user and contributions"
-msgstr ""
+msgstr "删除用户及相关贡献"
msgid "AdminUsers|To confirm, type %{projectName}"
-msgstr ""
+msgstr "请输入 %{projectName} 来确认"
msgid "AdminUsers|To confirm, type %{username}"
-msgstr ""
+msgstr "请输入 %{username} 来确认"
msgid "Advanced"
-msgstr ""
+msgstr "高级"
msgid "Advanced settings"
msgstr "高级设置"
@@ -206,14 +235,38 @@ msgid "All"
msgstr "全部"
msgid "All changes are committed"
+msgstr "所有更改均已提交"
+
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr "从模板或导入时为空白项目将启用所有功能,但可以在项目设置中将其禁用。"
+
+msgid "Allow edits from maintainers."
+msgstr "允许上游项目维护人员进行编辑。"
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
msgstr ""
msgid "Allows you to add and manage Kubernetes clusters."
+msgstr "这里可以添加和管理 Kubernetes 集群。"
+
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
msgstr ""
-msgid "An error occurred previewing the blob"
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr "此外,也可以使用 %{personal_access_token_link}。创建Personal Access Token时,在范围中需选择 repo ,以便显示可供连接的公开和私有的仓库列表。"
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr "此外,也可以使用 %{personal_access_token_link}。创建Personal Access Token时,在范围中需选择 repo ,以便显示可供导入公开和私有的仓库列表"
+
+msgid "An error occurred previewing the blob"
+msgstr "预览 blob 时出错"
+
msgid "An error occurred when toggling the notification subscription"
msgstr "切换通知订阅时发生错误"
@@ -221,74 +274,77 @@ msgid "An error occurred when updating the issue weight"
msgstr "更新议题权重时发生错误"
msgid "An error occurred while adding approver"
-msgstr ""
+msgstr "添加批准人时发生错误"
msgid "An error occurred while detecting host keys"
-msgstr ""
+msgstr "检测主机密钥时发生错误"
msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again."
-msgstr ""
+msgstr "关闭功能突出显示时发生错误。请刷新页面并再次尝试。"
msgid "An error occurred while fetching markdown preview"
-msgstr ""
+msgstr "获取 markdown 预览时出错"
msgid "An error occurred while fetching sidebar data"
msgstr "获取侧边栏数据时发生错误"
msgid "An error occurred while fetching the pipeline."
-msgstr ""
+msgstr "获取流水线时出错"
msgid "An error occurred while getting projects"
-msgstr ""
+msgstr "获取项目时发生错误"
msgid "An error occurred while importing project"
-msgstr ""
+msgstr "在导入项目时发生错误。"
msgid "An error occurred while initializing path locks"
-msgstr ""
+msgstr "初始化路径锁时发生错误"
msgid "An error occurred while loading commits"
-msgstr ""
+msgstr "加载提交时发生错误"
msgid "An error occurred while loading diff"
-msgstr ""
+msgstr "加载差异时发生错误"
msgid "An error occurred while loading filenames"
-msgstr ""
+msgstr "加载文件名时发生错误"
msgid "An error occurred while loading the file"
-msgstr ""
+msgstr "加载文件时发生错误"
msgid "An error occurred while making the request."
-msgstr ""
+msgstr "发送请求时发生错误。"
msgid "An error occurred while removing approver"
-msgstr ""
+msgstr "删除批准者时发生错误"
msgid "An error occurred while rendering KaTeX"
-msgstr ""
+msgstr "渲染KaTeX时发生错误"
msgid "An error occurred while rendering preview broadcast message"
-msgstr ""
+msgstr "渲染广播消息时发生错误"
msgid "An error occurred while retrieving calendar activity"
-msgstr ""
+msgstr "获取日历活动时发生错误"
msgid "An error occurred while retrieving diff"
-msgstr ""
+msgstr "获取差异时发生错误"
msgid "An error occurred while saving LDAP override status. Please try again."
-msgstr ""
+msgstr "保存LDAP覆盖状态时发生错误。请再试一次。"
msgid "An error occurred while saving assignees"
-msgstr ""
+msgstr "保存被指派人时出现错误。"
msgid "An error occurred while validating username"
-msgstr ""
+msgstr "验证用户名时发生错误"
msgid "An error occurred. Please try again."
msgstr "发生了错误,请再试一次。"
+msgid "Any Label"
+msgstr "任何标记"
+
msgid "Appearance"
msgstr "外观"
@@ -302,7 +358,7 @@ msgid "April"
msgstr "四月"
msgid "Archived project! Repository is read-only"
-msgstr "项目已归档!存储库为只读状态"
+msgstr "项目已归档!仓库为只读状态"
msgid "Are you sure you want to delete this pipeline schedule?"
msgstr "确定要删除此流水线计划吗?"
@@ -314,7 +370,7 @@ msgid "Are you sure you want to reset the health check token?"
msgstr "确定要重置健康检查令牌吗?"
msgid "Are you sure you want to unlock %{path_lock_path}?"
-msgstr ""
+msgstr "确定要解锁 %{path_lock_path} 吗?"
msgid "Are you sure?"
msgstr "确定吗?"
@@ -322,20 +378,32 @@ msgstr "确定吗?"
msgid "Artifacts"
msgstr "产物"
-msgid "Assign custom color like #FF0000"
+msgid "Assertion consumer service URL"
msgstr ""
+msgid "Assign custom color like #FF0000"
+msgstr "分配自定义颜色,如FF0000"
+
msgid "Assign labels"
-msgstr ""
+msgstr "指派标记"
msgid "Assign milestone"
-msgstr ""
+msgstr "分配里程碑"
msgid "Assign to"
-msgstr ""
+msgstr "分配到"
+
+msgid "Assigned Issues"
+msgstr "已分配议题"
+
+msgid "Assigned Merge Requests"
+msgstr "已分配合并请求"
+
+msgid "Assigned to :name"
+msgstr "已分配至 :name"
msgid "Assignee"
-msgstr ""
+msgstr "指派人"
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "拖放文件到此处或者 %{upload_link}"
@@ -353,19 +421,22 @@ msgid "Author"
msgstr "作者"
msgid "Authors: %{authors}"
-msgstr ""
+msgstr "作者:%{authors}"
msgid "Auto DevOps enabled"
+msgstr "启用Auto DevOps"
+
+msgid "Auto DevOps, runners and job artifacts"
msgstr ""
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
-msgstr ""
+msgstr "自动审阅程序和自动部署程序需要 %{kubernetes} 才能正常工作。"
msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly."
-msgstr ""
+msgstr "自动审阅程序和自动部署程序需要一个域名和 %{kubernetes} 才能正常工作。"
msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
-msgstr "自动审查程序和自动部署程序需要一个域名才能正常工作。"
+msgstr "自动审阅程序和自动部署程序需要一个域名才能正常工作。"
msgid "AutoDevOps|Auto DevOps (Beta)"
msgstr "DevOps 自动化(测试版)"
@@ -383,25 +454,31 @@ msgid "AutoDevOps|Learn more in the %{link_to_documentation}"
msgstr "想了解更多请访问 %{link_to_documentation}"
msgid "AutoDevOps|You can automatically build and test your application if you %{link_to_auto_devops_settings} for this project. You can automatically deploy it as well, if you %{link_to_add_kubernetes_cluster}."
-msgstr ""
+msgstr "如果当前项目%{link_to_auto_devops_settings}, 可以自动的构建和测试应用。如果已%{link_to_add_kubernetes_cluster},则也可以实现自动部署。"
msgid "AutoDevOps|add a Kubernetes cluster"
-msgstr ""
+msgstr "添加Kubernetes群集"
msgid "AutoDevOps|enable Auto DevOps (Beta)"
-msgstr ""
+msgstr "启用Auto DevOps (Beta)"
msgid "Available"
msgstr "可用的"
msgid "Avatar will be removed. Are you sure?"
-msgstr ""
+msgstr "即将删除头像。确定继续吗?"
msgid "Average per day: %{average}"
+msgstr "平均每天: %{average}"
+
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
msgstr ""
msgid "Begin with the selected commit"
-msgstr ""
+msgstr "从选定的提交开始"
msgid "Billing"
msgstr "账单"
@@ -422,7 +499,7 @@ msgid "BillingPlans|Downgrade"
msgstr "降级"
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "通过阅读我们的%{faq_link}了解有关每个计划的更多信息。"
+msgstr "请查阅%{faq_link} 进一步了解每个计划的相关信息。"
msgid "BillingPlans|Manage plan"
msgstr "管理计划"
@@ -459,7 +536,7 @@ msgstr "每用户"
msgid "Branch (%{branch_count})"
msgid_plural "Branches (%{branch_count})"
-msgstr[0] ""
+msgstr[0] "分支(%{branch_count})"
msgid "Branch %{branch_name} was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}"
msgstr "已创建分支 %{branch_name} 。如需设置自动部署, 请选择合适的 GitLab CI Yaml 模板并提交更改。%{link_to_autodeploy_doc}"
@@ -482,6 +559,15 @@ msgstr "切换分支"
msgid "Branches"
msgstr "分支"
+msgid "Branches|Active"
+msgstr "活跃"
+
+msgid "Branches|Active branches"
+msgstr "活跃分支"
+
+msgid "Branches|All"
+msgstr "全部"
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr "不能找到这个分支的 HEAD 提交"
@@ -507,7 +593,7 @@ msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you s
msgstr "删除 ”%{branch_name}” 后将无法恢复,您确定?"
msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
-msgstr "删除已合并的分支后将无法恢复,您确定?"
+msgstr "删除已合并的分支后将无法恢复,确定继续吗?"
msgid "Branches|Filter by branch name"
msgstr "按分支名称筛选"
@@ -527,12 +613,39 @@ msgstr "确认执行 %{delete_protected_branch} 后将无法撤销或恢复。"
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr "只有项目管理者或所有者才能删除受保护的分支!"
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
-msgstr "在 %{project_settings_link} 管理受保护的分支"
+msgid "Branches|Overview"
+msgstr "概览"
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr "在 %{project_settings_link} 中管理受保护的分支。"
+
+msgid "Branches|Show active branches"
+msgstr "查看活跃分支"
+
+msgid "Branches|Show all branches"
+msgstr "查看所有分支"
+
+msgid "Branches|Show more active branches"
+msgstr "查看更多活跃分支"
+
+msgid "Branches|Show more stale branches"
+msgstr "查看更多非活跃分支"
+
+msgid "Branches|Show overview of the branches"
+msgstr "查看分支概览"
+
+msgid "Branches|Show stale branches"
+msgstr "查看非活跃分支"
msgid "Branches|Sort by"
msgstr "排序"
+msgid "Branches|Stale"
+msgstr "非活跃"
+
+msgid "Branches|Stale branches"
+msgstr "非活跃分支"
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr "分支不能自动更新,因为它与上游分支不一致。"
@@ -546,25 +659,25 @@ msgid "Branches|To avoid data loss, consider merging this branch before deleting
msgstr "为避免数据丢失,请在删除之前合并此分支。"
msgid "Branches|To confirm, type %{branch_name_confirmation}:"
-msgstr "要确认?请输入 %{branch_name_confirmation} :"
+msgstr "请输入 %{branch_name_confirmation} 来确认:"
msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
msgstr "要放弃本地更改并覆盖上游版本的分支,请在此处将其删除,然后选择上面的“立即更新”。"
msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
-msgstr "将要永久删除受保护 %{branch_name} 分支。"
+msgstr "将要永久删除受保护的 %{branch_name} 分支。"
msgid "Branches|diverged from upstream"
msgstr "上游分支"
msgid "Branches|merged"
-msgstr "已合并的"
+msgstr "已合并"
msgid "Branches|project settings"
msgstr "项目设置"
msgid "Branches|protected"
-msgstr "受保护的"
+msgstr "受保护"
msgid "Browse Directory"
msgstr "浏览目录"
@@ -578,14 +691,23 @@ msgstr "浏览文件"
msgid "Browse files"
msgstr "浏览文件"
+msgid "Business"
+msgstr "业务"
+
msgid "ByAuthor|by"
msgstr "作者:"
msgid "CI / CD"
msgstr "CI / CD"
+msgid "CI/CD"
+msgstr "CI/CD"
+
msgid "CI/CD configuration"
-msgstr ""
+msgstr "CI/CD 配置"
+
+msgid "CI/CD for external repo"
+msgstr "外部仓库的 CI/CD"
msgid "CICD|Jobs"
msgstr "作业"
@@ -593,15 +715,21 @@ msgstr "作业"
msgid "Cancel"
msgstr "取消"
-msgid "Cancel edit"
-msgstr "取消编辑"
+msgid "Cannot be merged automatically"
+msgstr "无法自动合并"
msgid "Cannot modify managed Kubernetes cluster"
+msgstr "无法修改托管的 Kubernetes 群集"
+
+msgid "Certificate fingerprint"
msgstr ""
msgid "Change Weight"
msgstr "改变权重"
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "选择分支"
@@ -615,13 +743,13 @@ msgid "ChangeTypeAction|Revert"
msgstr "还原"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
-msgstr ""
+msgstr "这将创建一个新的提交, 来还原现有的更改。"
msgid "Changelog"
msgstr "更新日志"
msgid "Changes are shown as if the source revision was being merged into the target revision."
-msgstr ""
+msgstr "差异显示方式依源版本合并到目标版本的形式。"
msgid "Charts"
msgstr "统计图"
@@ -630,7 +758,7 @@ msgid "Chat"
msgstr "即时通讯"
msgid "Check interval"
-msgstr ""
+msgstr "检查间隔"
msgid "Checking %{text} availability…"
msgstr "正在检查%{text}的可用性..."
@@ -645,19 +773,25 @@ msgid "Cherry-pick this merge request"
msgstr "优选此合并请求"
msgid "Choose File ..."
-msgstr ""
+msgstr "选择文件 ……"
msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request."
-msgstr ""
+msgstr "选择分支/标签(例如%{master})或输入提交(例如%{sha})以查看更改内容或创建合并请求。"
msgid "Choose file..."
-msgstr ""
+msgstr "选择文件..."
msgid "Choose which groups you wish to synchronize to this secondary node."
-msgstr ""
+msgstr "选择要同步到此次节点的群组。"
+
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr "清选择要连接并运行 CI/CD 流水线的代码仓库。"
+
+msgid "Choose which repositories you want to import."
+msgstr "选择要导入的仓库"
msgid "Choose which shards you wish to synchronize to this secondary node."
-msgstr ""
+msgstr "选择要同步到此次节点的切片。"
msgid "CiStatusLabel|canceled"
msgstr "已取消"
@@ -714,79 +848,88 @@ msgid "CiStatus|running"
msgstr "运行中"
msgid "CiVariables|Input variable key"
-msgstr ""
+msgstr "输入变量的名称"
msgid "CiVariables|Input variable value"
-msgstr ""
+msgstr "输入变量的值"
msgid "CiVariables|Remove variable row"
-msgstr ""
+msgstr "删除变量行"
msgid "CiVariable|* (All environments)"
-msgstr ""
+msgstr "* (所有环境)"
msgid "CiVariable|All environments"
-msgstr ""
+msgstr "所有环境"
msgid "CiVariable|Create wildcard"
-msgstr ""
+msgstr "创建通配符"
msgid "CiVariable|Error occured while saving variables"
-msgstr ""
+msgstr "保存变量时发生错误"
msgid "CiVariable|New environment"
-msgstr ""
+msgstr "新建环境"
msgid "CiVariable|Protected"
-msgstr ""
+msgstr "受保护"
msgid "CiVariable|Search environments"
-msgstr ""
+msgstr "搜索环境"
msgid "CiVariable|Toggle protected"
-msgstr ""
+msgstr "开关保护状态"
msgid "CiVariable|Validation failed"
-msgstr ""
+msgstr "验证失败"
msgid "CircuitBreakerApiLink|circuitbreaker api"
msgstr "断路器 API"
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
-msgstr ""
+msgstr "点击下面的按钮转到Kubernetes页面开始安装过程"
msgid "Click to expand text"
-msgstr ""
+msgstr "点击展开文本"
+
+msgid "Client authentication certificate"
+msgstr "客户端认证证书"
+
+msgid "Client authentication key"
+msgstr "客户端认证密钥"
+
+msgid "Client authentication key password"
+msgstr "客户端认证密钥密码"
msgid "Clone repository"
-msgstr "克隆存储库"
+msgstr "克隆仓库"
msgid "Close"
msgstr "关闭"
msgid "Closed"
-msgstr ""
+msgstr "已关闭"
msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster"
-msgstr ""
+msgstr "%{appList} 已成功安装到Kubernetes群集上"
msgid "ClusterIntegration|API URL"
msgstr "API地址"
msgid "ClusterIntegration|Add Kubernetes cluster"
-msgstr ""
+msgstr "添加 Kubernetes 群集"
msgid "ClusterIntegration|Add an existing Kubernetes cluster"
-msgstr ""
+msgstr "添加现有的Kubernetes群集"
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
-msgstr ""
+msgstr "Kubernetes集群集成的高级选项"
msgid "ClusterIntegration|Applications"
msgstr "应用程序"
msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster."
-msgstr ""
+msgstr "确定要删除此Kubernetes集群的集成吗?注意这并不会删除实际的Kubernetes群集本身。"
msgid "ClusterIntegration|CA Certificate"
msgstr "CA证书"
@@ -795,13 +938,13 @@ msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "证书授权包(PEM格式)"
msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration"
-msgstr ""
+msgstr "选择如何设置Kubernetes集群集成"
msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster."
-msgstr ""
+msgstr "请选择使用此Kubernetes群集的环境。"
msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab"
-msgstr ""
+msgstr "控制Kubernetes集群与GitLab集成方式"
msgid "ClusterIntegration|Copy API URL"
msgstr "复制API地址"
@@ -810,22 +953,22 @@ msgid "ClusterIntegration|Copy CA Certificate"
msgstr "复制CA证书"
msgid "ClusterIntegration|Copy Ingress IP Address to clipboard"
-msgstr ""
+msgstr "复制Ingress IP地址到剪贴板"
msgid "ClusterIntegration|Copy Kubernetes cluster name"
-msgstr ""
+msgstr "复制Kubernetes集群名称"
msgid "ClusterIntegration|Copy Token"
msgstr "复制令牌"
msgid "ClusterIntegration|Create Kubernetes cluster"
-msgstr ""
+msgstr "创建Kubernetes群集"
msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine"
-msgstr ""
+msgstr "在Google Kubernetes引擎上创建Kubernetes集群"
msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab"
-msgstr ""
+msgstr "通过GitLab在Google Kubernetes引擎上创建Kubernetes集群"
msgid "ClusterIntegration|Create on GKE"
msgstr "在GKE中创建"
@@ -834,13 +977,13 @@ msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster"
msgstr "输入现有的 Kubernetes 集群详细信息"
msgid "ClusterIntegration|Enter the details for your Kubernetes cluster"
-msgstr ""
+msgstr "输入Kubernetes群集的详细信息"
msgid "ClusterIntegration|Environment scope"
-msgstr ""
+msgstr "环境范围"
msgid "ClusterIntegration|GitLab Integration"
-msgstr ""
+msgstr "GitLab集成"
msgid "ClusterIntegration|GitLab Runner"
msgstr "GitLab Runner"
@@ -857,15 +1000,21 @@ msgstr "Google Kubernetes Engine 项目"
msgid "ClusterIntegration|Helm Tiller"
msgstr "Helm Tiller"
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr "为了显示集群的健康状况,您的集群需要配置Prometheus以收集所需的数据。"
+
msgid "ClusterIntegration|Ingress"
msgstr "入口"
msgid "ClusterIntegration|Ingress IP Address"
-msgstr ""
+msgstr "Ingress IP地址"
msgid "ClusterIntegration|Install"
msgstr "安装"
+msgid "ClusterIntegration|Install Prometheus"
+msgstr "安装Prometheus"
+
msgid "ClusterIntegration|Installed"
msgstr "已安装"
@@ -873,67 +1022,73 @@ msgid "ClusterIntegration|Installing"
msgstr "安装中"
msgid "ClusterIntegration|Integrate Kubernetes cluster automation"
-msgstr ""
+msgstr "集成Kubernetes集群自动化"
msgid "ClusterIntegration|Integration status"
-msgstr ""
+msgstr "集成状态"
msgid "ClusterIntegration|Kubernetes cluster"
-msgstr ""
+msgstr "Kubernetes 群集"
msgid "ClusterIntegration|Kubernetes cluster details"
-msgstr ""
+msgstr "Kubernetes群集详细信息"
+
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr "Kubernetes集群健康度"
msgid "ClusterIntegration|Kubernetes cluster integration"
-msgstr ""
+msgstr "Kubernetes集群集成"
msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project."
-msgstr ""
+msgstr "此项目已禁用 Kubernetes 群集集成。"
msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project."
-msgstr ""
+msgstr "此项目已启用 Kubernetes 群集集成。"
msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it."
-msgstr ""
+msgstr "此项目已启用 Kubernetes 群集集成。禁用此集成不会影响 Kubernetes 群集本身, 只会暂时关闭 GitLab 与其连接。"
msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..."
-msgstr ""
+msgstr "正在Google Kubernetes Engine上创建Kubernetes群集..."
msgid "ClusterIntegration|Kubernetes cluster name"
-msgstr ""
+msgstr "Kubernetes 群集名称"
msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr ""
+msgstr "Kubernetes集群已在Google Kubernetes Engine上成功创建。刷新页面以查看Kubernetes群集的详细信息"
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}"
-msgstr ""
+msgstr "通过Kubernetes 群集集成,可以方便地使用审阅应用、部署应用程序、运行流水线等等。%{link_to_help_page}"
msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project"
-msgstr ""
+msgstr "Kubernetes 群集可用于部署应用程序和提供此项目的审阅应用"
msgid "ClusterIntegration|Learn more about %{link_to_documentation}"
-msgstr "了解详细%{link_to_documentation}"
+msgstr "进一步了解%{link_to_documentation}"
msgid "ClusterIntegration|Learn more about environments"
-msgstr ""
+msgstr "进一步了解有关环境的信息"
+
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr "进一步了解安全相关配置"
msgid "ClusterIntegration|Machine type"
msgstr "机器类型"
msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters"
-msgstr ""
+msgstr "请确保您的帐户 %{link_to_requirements} 可以创建 Kubernetes 群集"
msgid "ClusterIntegration|Manage"
-msgstr ""
+msgstr "管理"
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
-msgstr ""
+msgstr "通过访问 %{link_gke} 管理 Kubernetes 群集"
msgid "ClusterIntegration|More information"
-msgstr ""
+msgstr "更多信息"
msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate"
-msgstr ""
+msgstr "在GitLab企业高级和旗舰版中可以使用多个Kubernetes集群"
msgid "ClusterIntegration|Note:"
msgstr "注意:"
@@ -942,7 +1097,7 @@ msgid "ClusterIntegration|Number of nodes"
msgstr "节点数量"
msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes"
-msgstr ""
+msgstr "请输入Kubernetes集群的访问信息。如需帮助,可以阅读Kubernetes集群的 %{link_to_help_page}"
msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:"
msgstr "请确保您的 Google 帐户符合以下要求:"
@@ -957,19 +1112,19 @@ msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "项目命名空间(可选,唯一)"
msgid "ClusterIntegration|Prometheus"
-msgstr ""
+msgstr "Prometheus"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
-msgstr ""
+msgstr "请阅读关于Kubernetes集群集成的%{link_to_help_page}。"
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
-msgstr ""
+msgstr "删除Kubernetes集群集成"
msgid "ClusterIntegration|Remove integration"
msgstr "删除集成"
msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster."
-msgstr ""
+msgstr "从当前项目中删除此Kubernetes集群的配置。该操作并不会删除实际Kubernetes群集。"
msgid "ClusterIntegration|Request to begin installing failed"
msgstr "请求安装失败"
@@ -977,8 +1132,11 @@ msgstr "请求安装失败"
msgid "ClusterIntegration|Save changes"
msgstr "保存更改"
+msgid "ClusterIntegration|Security"
+msgstr "安全"
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
-msgstr ""
+msgstr "查看并编辑Kubernetes集群的详细信息"
msgid "ClusterIntegration|See machine types"
msgstr "参见机器类型"
@@ -999,25 +1157,28 @@ msgid "ClusterIntegration|Something went wrong on our end."
msgstr "发生了内部错误"
msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine"
-msgstr ""
+msgstr "在 Google Kubernetes Engine 上创建Kubernetes集群时发生错误"
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr "安装 %{title} 时发生故障"
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr "默认集群配置提供了成功构建和部署容器化应用所需的大量相关功能。"
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
-msgstr ""
+msgstr "该帐户需具备在下面指定的%{link_to_container_project}中创建 Kubernetes集群的权限"
msgid "ClusterIntegration|Toggle Kubernetes Cluster"
-msgstr ""
+msgstr "开关Kubernetes 群集"
msgid "ClusterIntegration|Toggle Kubernetes cluster"
-msgstr ""
+msgstr "开关Kubernetes 群集"
msgid "ClusterIntegration|Token"
msgstr "令牌"
msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way."
-msgstr ""
+msgstr "使用与此项目关联的Kubernetes集群,可以方便地使用审阅应用,部署应用程序,运行流水线等等。"
msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}"
msgstr "您的帐户必须拥有%{link_to_kubernetes_engine}"
@@ -1029,7 +1190,7 @@ msgid "ClusterIntegration|access to Google Kubernetes Engine"
msgstr "访问 Google Kubernetes Engine"
msgid "ClusterIntegration|check the pricing here"
-msgstr ""
+msgstr "查看定价"
msgid "ClusterIntegration|documentation"
msgstr "文档"
@@ -1047,13 +1208,13 @@ msgid "ClusterIntegration|properly configured"
msgstr "正确配置"
msgid "Collapse"
-msgstr ""
+msgstr "收起"
msgid "Comment and resolve discussion"
-msgstr ""
+msgstr "评论并解决讨论"
msgid "Comment and unresolve discussion"
-msgstr ""
+msgstr "评论并将讨论变为未决"
msgid "Comments"
msgstr "评论"
@@ -1064,7 +1225,7 @@ msgstr[0] "提交"
msgid "Commit (%{commit_count})"
msgid_plural "Commits (%{commit_count})"
-msgstr[0] ""
+msgstr[0] "提交(%{commit_count})"
msgid "Commit Message"
msgstr "提交消息"
@@ -1076,10 +1237,10 @@ msgid "Commit message"
msgstr "提交信息"
msgid "Commit statistics for %{ref} %{start_time} - %{end_time}"
-msgstr ""
+msgstr "提交统计 %{ref} %{start_time} - %{end_time}"
msgid "Commit to %{branchName} branch"
-msgstr ""
+msgstr "提交到 %{branchName} 分支"
msgid "CommitBoxTitle|Commit"
msgstr "提交"
@@ -1094,25 +1255,25 @@ msgid "Commits feed"
msgstr "提交动态"
msgid "Commits per day hour (UTC)"
-msgstr ""
+msgstr "一天中每小时(UTC)提交数"
msgid "Commits per day of month"
-msgstr ""
+msgstr "一个月中每天的提交数"
msgid "Commits per weekday"
-msgstr ""
+msgstr "一周中每日提交数"
msgid "Commits|An error occurred while fetching merge requests data."
-msgstr ""
+msgstr "获取合并请求数据时出错"
msgid "Commits|Commit: %{commitText}"
-msgstr ""
+msgstr "提交内容:%{commitText}"
msgid "Commits|History"
msgstr "历史"
msgid "Commits|No related merge requests found"
-msgstr ""
+msgstr "无相关合并请求"
msgid "Committed by"
msgstr "提交者:"
@@ -1121,29 +1282,71 @@ msgid "Compare"
msgstr "比较"
msgid "Compare Git revisions"
-msgstr ""
+msgstr "比较Git提交版本"
msgid "Compare Revisions"
+msgstr "比较版本"
+
+msgid "Compare changes with the last commit"
+msgstr "与上个提交比较变更内容"
+
+msgid "Compare changes with the merge request target branch"
msgstr ""
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
-msgstr ""
+msgstr "%{source_branch} 和 %{target_branch} 是相同的"
msgid "CompareBranches|Compare"
-msgstr ""
+msgstr "比较"
msgid "CompareBranches|Source"
-msgstr ""
+msgstr "源分支"
msgid "CompareBranches|Target"
-msgstr ""
+msgstr "目标分支"
msgid "CompareBranches|There isn't anything to compare."
-msgstr ""
+msgstr "无需比较。"
+
+msgid "Confidential"
+msgstr "机密"
msgid "Confidentiality"
+msgstr "私密性"
+
+msgid "Configure Gitaly timeouts."
msgstr ""
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr "配置用户创建新帐户的方式。"
+
+msgid "Connect"
+msgstr "连接"
+
+msgid "Connect all repositories"
+msgstr "连接所有仓库"
+
+msgid "Connect repositories from GitHub"
+msgstr "从 Github 中导入代码仓库"
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr "连接外部仓库后,新提交将会启动CI/CD流水线。仅启用CI/CD功能的Gitlab项目将会被创建。"
+
+msgid "Connecting..."
+msgstr "正在连接..."
+
msgid "Container Registry"
msgstr "容器注册"
@@ -1160,7 +1363,7 @@ msgid "ContainerRegistry|How to use the Container Registry"
msgstr "如何使用容器注册表"
msgid "ContainerRegistry|Learn more about"
-msgstr "关于更多"
+msgstr "进一步了解"
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "容器注册表中没有此容器镜像的标签。"
@@ -1169,7 +1372,7 @@ msgid "ContainerRegistry|Once you log in, you’re free to create and upload
msgstr "登录后您可以使用通用的%{build}和%{push}命令创建和上传容器镜像"
msgid "ContainerRegistry|Remove repository"
-msgstr "删除存储库"
+msgstr "删除仓库"
msgid "ContainerRegistry|Remove tag"
msgstr "删除标签"
@@ -1189,6 +1392,12 @@ msgstr "使用不同的镜像名称"
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr "将 Docker 容器注册表集成到 GitLab 中,每个项目都可以有各自的空间来存储 Docker 的镜像。"
+msgid "Continuous Integration and Deployment"
+msgstr "持续集成和部署"
+
+msgid "Contribution"
+msgstr "贡献"
+
msgid "Contribution guide"
msgstr "贡献指南"
@@ -1196,22 +1405,22 @@ msgid "Contributors"
msgstr "贡献者"
msgid "ContributorsPage|%{startDate} – %{endDate}"
-msgstr ""
+msgstr "%{startDate} – %{endDate}"
msgid "ContributorsPage|Building repository graph."
-msgstr "构建存储库图标。"
+msgstr "构建图表中。"
msgid "ContributorsPage|Commits to %{branch_name}, excluding merge commits. Limited to 6,000 commits."
-msgstr "提交到%{branch_name},排除合并提交。限于6000次提交。"
+msgstr "%{branch_name} 分支上的提交,不含合并提交。限6000次。"
msgid "ContributorsPage|Please wait a moment, this page will automatically refresh when ready."
-msgstr "请稍等片刻,这个页面会在准备好时自动刷新。"
+msgstr "请稍候,图表构建完成后页面会自动刷新。"
msgid "Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr "控制此次要节点的 LFS/attachment 的最大并发"
msgid "Control the maximum concurrency of repository backfill for this secondary node"
-msgstr "控制此次要节点的存储库最大并发"
+msgstr "控制此次要节点的仓库最大并发"
msgid "Copy SSH public key to clipboard"
msgstr "复制 SSH 公钥到剪贴板"
@@ -1220,55 +1429,58 @@ msgid "Copy URL to clipboard"
msgstr "复制 URL 到剪贴板"
msgid "Copy branch name to clipboard"
-msgstr ""
+msgstr "将分支名称复制到剪贴板"
msgid "Copy command to clipboard"
-msgstr ""
+msgstr "将命令复制到剪贴板"
msgid "Copy commit SHA to clipboard"
msgstr "复制提交 SHA 的值到剪贴板"
msgid "Copy reference to clipboard"
-msgstr ""
+msgstr "将索引复制到剪贴板"
msgid "Create"
-msgstr ""
+msgstr "创建"
msgid "Create New Directory"
msgstr "创建新目录"
msgid "Create a new branch"
-msgstr ""
+msgstr "创建一个新分支"
msgid "Create a new branch and merge request"
-msgstr ""
+msgstr "创建一个新的分支及合并请求"
msgid "Create a personal access token on your account to pull or push via %{protocol}."
msgstr "在帐户上创建个人访问令牌,以通过 %{protocol} 来拉取或推送。"
msgid "Create branch"
-msgstr ""
+msgstr "创建分支"
msgid "Create directory"
msgstr "创建目录"
-msgid "Create empty bare repository"
-msgstr "创建空的存储库"
+msgid "Create empty repository"
+msgstr "创建空的仓库"
msgid "Create epic"
-msgstr "创建EPIC"
+msgstr "创建史诗故事"
msgid "Create file"
msgstr "创建文件"
+msgid "Create group label"
+msgstr "创建群组标记"
+
msgid "Create lists from labels. Issues with that label appear in that list."
-msgstr ""
+msgstr "从标记创建列表,含有该标记的议题将出现在相应的列中。"
msgid "Create merge request"
msgstr "创建合并请求"
msgid "Create merge request and branch"
-msgstr ""
+msgstr "创建合并请求及分支"
msgid "Create new branch"
msgstr "创建新分支"
@@ -1280,11 +1492,14 @@ msgid "Create new file"
msgstr "创建新文件"
msgid "Create new label"
-msgstr ""
+msgstr "创建新标记"
msgid "Create new..."
msgstr "创建..."
+msgid "Create project label"
+msgstr "创建项目标记"
+
msgid "CreateNewFork|Fork"
msgstr "派生"
@@ -1295,13 +1510,13 @@ msgid "CreateTokenToCloneLink|create a personal access token"
msgstr "创建个人访问令牌"
msgid "Creates a new branch from %{branchName}"
-msgstr ""
+msgstr "自%{branchName} 创建一个新分支"
msgid "Creates a new branch from %{branchName} and re-directs to create a new merge request"
-msgstr ""
+msgstr "自%{branchName} 创建一个新分支,并转到创建一个新的合并请求"
msgid "Creating epic"
-msgstr "创建EPIC中"
+msgstr "创建史诗故事中"
msgid "Cron Timezone"
msgstr "Cron 时区"
@@ -1310,7 +1525,7 @@ msgid "Cron syntax"
msgstr "Cron 语法"
msgid "Current node"
-msgstr ""
+msgstr "当前节点"
msgid "Custom notification events"
msgstr "自定义通知事件"
@@ -1318,6 +1533,9 @@ msgstr "自定义通知事件"
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "自定义通知级别继承自参与级别。使用自定义通知级别,您会收到参与级别及选定事件的通知。想了解更多信息,请查看 %{notification_link}."
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr "周期分析"
@@ -1355,7 +1573,7 @@ msgid "December"
msgstr "十二月"
msgid "Default classification label"
-msgstr ""
+msgstr "默认分类标签"
msgid "Define a custom pattern with cron syntax"
msgstr "使用 Cron 语法定义自定义模式"
@@ -1380,19 +1598,19 @@ msgid "Details"
msgstr "详情"
msgid "Diffs|No file name available"
-msgstr ""
+msgstr "没有可用的文件名"
msgid "Directory name"
msgstr "目录名称"
msgid "Disable"
-msgstr ""
+msgstr "禁用"
msgid "Discard draft"
-msgstr ""
+msgstr "舍弃草稿"
msgid "Discover GitLab Geo."
-msgstr ""
+msgstr "发现GitLab Geo。"
msgid "Dismiss Cycle Analytics introduction box"
msgstr "关闭循环分析介绍框"
@@ -1400,9 +1618,15 @@ msgstr "关闭循环分析介绍框"
msgid "Dismiss Merge Request promotion"
msgstr "关闭合并请求中的促销广告"
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr "不再显示"
+msgid "Done"
+msgstr "完成"
+
msgid "Download"
msgstr "下载"
@@ -1430,7 +1654,13 @@ msgstr "差异文件"
msgid "DownloadSource|Download"
msgstr "下载"
+msgid "Downvotes"
+msgstr "踩"
+
msgid "Due date"
+msgstr "截止日期"
+
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
msgstr ""
msgid "Edit"
@@ -1440,15 +1670,54 @@ msgid "Edit Pipeline Schedule %{id}"
msgstr "编辑 %{id} 流水线计划"
msgid "Edit files in the editor and commit changes here"
+msgstr "在编辑器中编辑文件并在这里提交变更内容"
+
+msgid "Editing"
+msgstr "编辑"
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
msgstr ""
msgid "Emails"
msgstr "电子邮件"
msgid "Enable"
-msgstr ""
+msgstr "启用"
msgid "Enable Auto DevOps"
+msgstr "启用Auto DevOps"
+
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr "启用并配置InfluxDB指标。"
+
+msgid "Enable and configure Prometheus metrics."
+msgstr "启用并配置Prometheus指标。"
+
+msgid "Enable classification control using an external service"
+msgstr "使用外部服务启用分类控制"
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
msgstr ""
msgid "Environments|An error occurred while fetching the environments."
@@ -1497,7 +1766,7 @@ msgid "Environments|Updated"
msgstr "已更新"
msgid "Environments|You don't have any environments right now."
-msgstr "你还没有设置环境"
+msgstr "当前未设置环境"
msgid "Epic will be removed! Are you sure?"
msgstr "EPIC将被删除!是否确定?"
@@ -1506,46 +1775,49 @@ msgid "Epics"
msgstr "EPIC"
msgid "Epics Roadmap"
-msgstr ""
+msgstr "史诗故事路线图"
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
-msgstr "EPIC让你更有效率地管理你的项目组合,而且不费吹灰之力"
+msgstr "利用史诗故事(Epics),产品线管理会变得更轻松且更高效"
+
+msgid "Error Reporting and Logging"
+msgstr ""
msgid "Error checking branch data. Please try again."
-msgstr ""
+msgstr "检查分支数据时出错。请再试一次。"
msgid "Error committing changes. Please try again."
-msgstr ""
+msgstr "提交更改时出错。请再试一次。"
msgid "Error creating epic"
-msgstr "创建EPIC时出错"
+msgstr "创建史诗故事时出错"
msgid "Error fetching contributors data."
-msgstr ""
+msgstr "获取贡献者数据时出错。"
msgid "Error fetching labels."
-msgstr ""
+msgstr "获取标记时出错。"
msgid "Error fetching network graph."
-msgstr ""
+msgstr "获取网络图时出错。"
msgid "Error fetching refs"
-msgstr ""
+msgstr "获取refs时出错。"
msgid "Error fetching usage ping data."
-msgstr ""
+msgstr "获取使用情况(usage ping) 数据时出错。"
msgid "Error occurred when toggling the notification subscription"
msgstr "切换通知订阅时发生错误"
msgid "Error saving label update."
-msgstr ""
+msgstr "保存标记更新时出错。"
msgid "Error updating status for all todos."
-msgstr ""
+msgstr "更新所有待办事项的状态时出错。"
msgid "Error updating todo status."
-msgstr ""
+msgstr "更新待办事项状态时出错。"
msgid "EventFilterBy|Filter by all"
msgstr "全部"
@@ -1575,7 +1847,7 @@ msgid "Every week (Sundays at 4:00am)"
msgstr "每周执行(周日凌晨 4 点)"
msgid "Expand"
-msgstr ""
+msgstr "展开"
msgid "Explore projects"
msgstr "查看项目"
@@ -1584,34 +1856,43 @@ msgid "Explore public groups"
msgstr "搜索公共群组"
msgid "External Classification Policy Authorization"
+msgstr "外部分类政策授权"
+
+msgid "External authentication"
msgstr ""
msgid "External authorization denied access to this project"
-msgstr ""
+msgstr "外部授权拒绝访问此项目"
+
+msgid "External authorization request timeout"
+msgstr "外部授权请求超时"
msgid "ExternalAuthorizationService|Classification Label"
-msgstr ""
+msgstr "分类标签"
msgid "ExternalAuthorizationService|Classification label"
-msgstr ""
+msgstr "分类标签"
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
-msgstr ""
+msgstr "未设置分类标签时,将使用默认的分类标签`%{default_label}`。"
+
+msgid "Failed"
+msgstr "已失败"
msgid "Failed Jobs"
-msgstr ""
+msgstr "失败的作业"
msgid "Failed to change the owner"
msgstr "无法变更所有者"
msgid "Failed to remove issue from board, please try again."
-msgstr ""
+msgstr "无法从看板移除问题,请重试。"
msgid "Failed to remove the pipeline schedule"
msgstr "无法删除流水线计划"
msgid "Failed to update issues, please try again."
-msgstr ""
+msgstr "更新议题失败, 请重试"
msgid "Feb"
msgstr "二"
@@ -1620,7 +1901,7 @@ msgid "February"
msgstr "二月"
msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
+msgstr "当前页面上的字段不可编辑,可以配置"
msgid "File name"
msgstr "文件名"
@@ -1629,6 +1910,9 @@ msgid "Files"
msgstr "文件"
msgid "Files (%{human_size})"
+msgstr "文件(%{human_size})"
+
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
msgstr ""
msgid "Filter by commit message"
@@ -1640,12 +1924,21 @@ msgstr "按路径查找"
msgid "Find file"
msgstr "查找文件"
+msgid "Finished"
+msgstr "已完成"
+
msgid "FirstPushedBy|First"
msgstr "首次推送"
msgid "FirstPushedBy|pushed by"
msgstr "推送者:"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] "派生"
@@ -1656,9 +1949,15 @@ msgstr "派生自"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr "派生自 %{project_name} (删除)"
+msgid "Forking in progress"
+msgstr "派生(Fork)中"
+
msgid "Format"
msgstr "格式"
+msgid "From %{provider_title}"
+msgstr "来自 %{provider_title}"
+
msgid "From issue creation until deploy to production"
msgstr "从创建议题到部署至生产环境"
@@ -1666,143 +1965,209 @@ msgid "From merge request merge until deploy to production"
msgstr "从合并请求被合并后到部署至生产环境"
msgid "From the Kubernetes cluster details view, install Runner from the applications list"
-msgstr ""
+msgstr "在Kubernetes群集详细信息视图中,从应用程序列表中安装Runner"
msgid "GPG Keys"
msgstr "GPG 密钥"
msgid "Generate a default set of labels"
-msgstr ""
+msgstr "生成一组默认的标记"
msgid "Geo Nodes"
msgstr "Geo 节点"
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "节点出现故障或损坏。"
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr "节点运行缓慢、超载, 或者在停机后刚刚恢复。"
+msgid "GeoNodes|Checksummed"
+msgstr "已校验"
+
msgid "GeoNodes|Database replication lag:"
-msgstr ""
+msgstr "数据库同步滞后"
msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?"
-msgstr ""
+msgstr "禁用节点会中止同步过程。确定继续吗?"
msgid "GeoNodes|Does not match the primary storage configuration"
-msgstr ""
+msgstr "与主存储配置不一致"
msgid "GeoNodes|Failed"
-msgstr ""
+msgstr "失败"
msgid "GeoNodes|Full"
-msgstr ""
+msgstr "全部"
msgid "GeoNodes|GitLab version does not match the primary node version"
-msgstr ""
+msgstr "GitLab版本与主节点版本不一致"
msgid "GeoNodes|GitLab version:"
-msgstr ""
+msgstr "GitLab版本:"
msgid "GeoNodes|Health status:"
-msgstr ""
+msgstr "健康状况:"
msgid "GeoNodes|Last event ID processed by cursor:"
-msgstr ""
+msgstr "游标处理的最后事件ID:"
msgid "GeoNodes|Last event ID seen from primary:"
-msgstr ""
+msgstr "主节点中最后事件ID:"
msgid "GeoNodes|Loading nodes"
-msgstr ""
+msgstr "载入节点"
msgid "GeoNodes|Local Attachments:"
-msgstr ""
+msgstr "本地附件:"
msgid "GeoNodes|Local LFS objects:"
-msgstr ""
+msgstr "本地LFS对象:"
msgid "GeoNodes|Local job artifacts:"
-msgstr ""
+msgstr "本地作业生成物:"
msgid "GeoNodes|New node"
-msgstr ""
+msgstr "新建节点"
+
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr "节点认证已成功修复。"
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr "节点已成功删除。"
+
+msgid "GeoNodes|Not checksummed"
+msgstr "未校验"
msgid "GeoNodes|Out of sync"
-msgstr ""
+msgstr "不同步"
+
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr "删除节点会停止同步。确定继续?"
msgid "GeoNodes|Replication slot WAL:"
-msgstr ""
+msgstr "复制槽WAL:"
msgid "GeoNodes|Replication slots:"
-msgstr ""
+msgstr "复制槽:"
+
+msgid "GeoNodes|Repositories checksummed:"
+msgstr "已校验仓库:"
msgid "GeoNodes|Repositories:"
-msgstr ""
+msgstr "仓库:"
+
+msgid "GeoNodes|Repository checksums verified:"
+msgstr "仓库校验和已验证:"
msgid "GeoNodes|Selective"
-msgstr ""
+msgstr "选择性"
+
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr "更改节点状态时发生错误"
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr "删除节点时发生错误"
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr "修复节点时发生错误"
msgid "GeoNodes|Storage config:"
-msgstr ""
+msgstr "存储设置:"
msgid "GeoNodes|Sync settings:"
-msgstr ""
+msgstr "同步设置:"
msgid "GeoNodes|Synced"
-msgstr ""
+msgstr "已同步"
msgid "GeoNodes|Unused slots"
-msgstr ""
+msgstr "未使用的槽"
+
+msgid "GeoNodes|Unverified"
+msgstr "未验证"
msgid "GeoNodes|Used slots"
-msgstr ""
+msgstr "已使用的槽"
+
+msgid "GeoNodes|Verified"
+msgstr "已验证"
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr " Wiki校验已验证:"
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr "wiki已校验"
msgid "GeoNodes|Wikis:"
-msgstr ""
+msgstr "Wiki:"
msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS."
-msgstr ""
+msgstr "当前Geo节点配置使用非加密的HTTP连接, 建议使用HTTPS。"
msgid "Geo|All projects"
-msgstr ""
+msgstr "所有项目"
msgid "Geo|File sync capacity"
msgstr "文件同步量"
msgid "Geo|Groups to synchronize"
-msgstr ""
+msgstr "需同步的群组"
msgid "Geo|Projects in certain groups"
-msgstr ""
+msgstr "特定群组中的项目"
msgid "Geo|Projects in certain storage shards"
-msgstr ""
+msgstr "特定存储片中的项目"
msgid "Geo|Repository sync capacity"
-msgstr "存储库同步量"
+msgstr "仓库同步量"
msgid "Geo|Select groups to replicate."
msgstr "选择要复制的群组。"
msgid "Geo|Shards to synchronize"
-msgstr ""
+msgstr "需同步的存储片"
+
+msgid "Git repository URL"
+msgstr "Git仓库URL"
msgid "Git revision"
-msgstr ""
+msgstr "Git提交版本"
msgid "Git storage health information has been reset"
msgstr "Git 存储健康信息已重置"
msgid "Git version"
+msgstr "Git 版本"
+
+msgid "GitHub import"
+msgstr "GitHub导入"
+
+msgid "GitLab CI Linter has been moved"
+msgstr "GitLab CI Linter已被转移"
+
+msgid "GitLab Geo"
msgstr ""
msgid "GitLab Runner section"
msgstr "GitLab Runner"
-msgid "Gitaly Servers"
+msgid "GitLab single sign on URL"
msgstr ""
+msgid "Gitaly"
+msgstr ""
+
+msgid "Gitaly Servers"
+msgstr "Gitaly服务器"
+
+msgid "Go back"
+msgstr "返回"
+
msgid "Go to your fork"
msgstr "跳转到派生项目"
@@ -1813,25 +2178,25 @@ msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab ad
msgstr "Google 身份验证不是%{link_to_documentation}。如果您想使用此服务,请咨询您的 GitLab 管理员。"
msgid "Got it!"
-msgstr ""
+msgstr "了解!"
msgid "GroupRoadmap|Epics let you manage your portfolio of projects more efficiently and with less effort"
-msgstr ""
+msgstr "利用史诗故事(Epics),产品线管理会变得更轻松且更高效"
msgid "GroupRoadmap|From %{dateWord}"
-msgstr ""
+msgstr "从 %{dateWord}"
msgid "GroupRoadmap|Loading roadmap"
-msgstr ""
+msgstr "载入路线图"
msgid "GroupRoadmap|Something went wrong while fetching epics"
-msgstr ""
+msgstr "读取史诗故事时出错"
msgid "GroupRoadmap|To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown – from %{startDate} to %{endDate}."
-msgstr ""
+msgstr "如需查看路线图,请将计划的开始或结束日期添加到当前群组或其子组中的某个史诗故事。只显示过去3个月和接下来3个月的史诗故事– 从 %{startDate} 至 %{endDate}."
msgid "GroupRoadmap|Until %{dateWord}"
-msgstr ""
+msgstr "直到 %{dateWord}"
msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
msgstr "禁止与其他群组共享 %{group} 中的项目"
@@ -1849,7 +2214,7 @@ msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can overr
msgstr "此设置已应用于 %{ancestor_group}。 您可以覆盖此设置或 %{remove_ancestor_share_with_group_lock}。"
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
-msgstr "此设置将应用于所有子组,除非由组所有者覆盖。已经有权访问该项目的群组将继续访问,除非手动移除。"
+msgstr "此设置将应用于所有子组,除非由组所有者覆盖。已经有权访问该项目的群组将仍然具有访问权限,除非访问权限被手动移除。"
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "无法禁用父组的“共享群组锁”,只有父群组的所有者才可以操作!"
@@ -1869,9 +2234,6 @@ msgstr "找不到群组"
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr "您可以管理群组成员的权限并访问群组中的每个项目。"
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr "在此群组中创建一个项目。"
@@ -1902,6 +2264,9 @@ msgstr "对不起,没有任何群组或项目符合您的搜索"
msgid "Have your users email"
msgstr "有你的用户邮件"
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr "健康检查"
@@ -1909,7 +2274,7 @@ msgid "Health information can be retrieved from the following endpoints. More in
msgstr "健康信息可以从以下API路径获取。如需了解更多信息,请查看"
msgid "HealthCheck|Access token is"
-msgstr "访问令牌是"
+msgstr "访问令牌为"
msgid "HealthCheck|Healthy"
msgstr "健康"
@@ -1920,9 +2285,18 @@ msgstr "没有检测到健康问题"
msgid "HealthCheck|Unhealthy"
msgstr "非健康"
+msgid "Help"
+msgstr "帮助"
+
+msgid "Help page"
+msgstr "帮助页面"
+
+msgid "Help page text and support page url."
+msgstr "帮助页面文本和支持页面网址。"
+
msgid "Hide value"
msgid_plural "Hide values"
-msgstr[0] ""
+msgstr[0] "隐藏值"
msgid "History"
msgstr "历史"
@@ -1930,11 +2304,38 @@ msgstr "历史"
msgid "Housekeeping successfully started"
msgstr "已开始维护"
-msgid "If you already have files you can push them using the %{link_to_cli} below."
+msgid "Identity provider single sign on URL"
msgstr ""
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr "如果启用,则使用外部服务上的分类标签来验证对项目的访问权限。"
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr "如使用GitHub,GitHub上的提交和拉取请求(pull request)将会显示流水线状态。 %{more_info_link}"
+
+msgid "If you already have files you can push them using the %{link_to_cli} below."
+msgstr "如果文件已存在,可以使用下面的 %{link_to_cli} 推送它们。"
+
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr "如果HTTP仓库不可公开访问,请将身份验证信息添加到URL: https://username:password@gitlab.company.com/group/project.git."
+
+msgid "Import"
+msgstr "导入"
+
+msgid "Import all repositories"
+msgstr "导入所有仓库"
+
+msgid "Import in progress"
+msgstr "正在导入"
+
+msgid "Import repositories from GitHub"
+msgstr "从 GitHub 导入仓库"
+
msgid "Import repository"
-msgstr "导入存储库"
+msgstr "导入仓库"
+
+msgid "ImportButtons|Connect repositories from"
+msgstr "用以下方式连接仓库"
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr "协助改进 GitLab 企业版的议题看板。"
@@ -1946,7 +2347,7 @@ msgid "Improve search with Advanced Global Search and GitLab Enterprise Edition.
msgstr "协助改进GitLab 企业版的搜索和高级全局搜索 。"
msgid "Install Runner on Kubernetes"
-msgstr ""
+msgstr "在Kubernetes上安装Runner"
msgid "Install a Runner compatible with GitLab CI"
msgstr "安装一个与 GitLab CI 兼容的 Runner"
@@ -1956,10 +2357,13 @@ msgid_plural "Instances"
msgstr[0] "实例"
msgid "Instance does not support multiple Kubernetes clusters"
-msgstr ""
+msgstr "实例不支持多个Kubernetes群集"
+
+msgid "Integrations"
+msgstr "导入所有仓库"
msgid "Interested parties can even contribute by pushing commits if they want to."
-msgstr ""
+msgstr "相关人员甚至可以通过推送提交来为项目作出贡献。"
msgid "Internal - The group and any internal projects can be viewed by any logged in user."
msgstr "内部 - 任何登录的用户都可以查看该群组和任何内部项目。"
@@ -1989,7 +2393,7 @@ msgid "Issues"
msgstr "议题"
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
-msgstr ""
+msgstr "议题可以是缺陷,任务或要讨论的想法。此外,可以通过搜索和过滤来查找议题。"
msgid "Jan"
msgstr "一"
@@ -1998,7 +2402,7 @@ msgid "January"
msgstr "一月"
msgid "Jobs"
-msgstr ""
+msgstr "作业"
msgid "Jul"
msgstr "七"
@@ -2012,29 +2416,32 @@ msgstr "六"
msgid "June"
msgstr "六月"
-msgid "Kubernetes"
+msgid "Koding"
msgstr ""
+msgid "Kubernetes"
+msgstr "Kubernetes"
+
msgid "Kubernetes Cluster"
-msgstr ""
+msgstr "Kubernetes集群"
msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}"
-msgstr ""
+msgstr "Kubernetes集群创建时间超过超时; %{timeout}"
msgid "Kubernetes cluster integration was not removed."
-msgstr ""
+msgstr "Kubernetes集群集成未被删除。"
msgid "Kubernetes cluster integration was successfully removed."
-msgstr ""
+msgstr "Kubernetes集群集成已成功删除。"
msgid "Kubernetes cluster was successfully updated."
-msgstr ""
+msgstr "Kubernetes群集已成功更新。"
msgid "Kubernetes configured"
-msgstr ""
+msgstr "Kubernetes已配置"
msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new Kubernetes Clusters page"
-msgstr ""
+msgstr "Kubernetes服务集成即将被停用。 请使用新的 Kubernetes群集 页面%{deprecated_message_content} Kubernetes集群"
msgid "LFSStatus|Disabled"
msgstr "停用"
@@ -2042,11 +2449,29 @@ msgstr "停用"
msgid "LFSStatus|Enabled"
msgstr "启用"
+msgid "Label"
+msgstr "标记"
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr "%{firstLabelName} +%{remainingLabelCount} 更多"
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr "%{labelsString}和 %{remainingLabelCount} 更多"
+
msgid "Labels"
-msgstr "标签"
+msgstr "标记"
+
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr "标记可以应用于 %{features}。群组标记可用于群组中的所有项目。"
msgid "Labels can be applied to issues and merge requests to categorize them."
-msgstr ""
+msgstr "标记可用于对议题和合并请求进行分类。"
+
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr "将标记 %{labelTitle} 升级为群组标记?"
+
+msgid "Labels|Promote Label"
+msgstr "升级标记"
msgid "Last %d day"
msgid_plural "Last %d days"
@@ -2077,13 +2502,13 @@ msgid "LastPushEvent|at"
msgstr "于"
msgid "Learn more"
-msgstr ""
+msgstr "进一步了解"
msgid "Learn more about Kubernetes"
-msgstr ""
+msgstr "进一步了解关于Kubernetes的信息"
msgid "Learn more about protected branches"
-msgstr ""
+msgstr "进一步了解保护分支"
msgid "Learn more in the"
msgstr "了解更多"
@@ -2104,22 +2529,22 @@ msgid "License"
msgstr "许可协议"
msgid "List"
-msgstr ""
+msgstr "列表"
+
+msgid "List your GitHub repositories"
+msgstr "列出GitHub仓库"
msgid "Loading the GitLab IDE..."
-msgstr ""
+msgstr "加载GitLab IDE..."
msgid "Lock"
msgstr "锁定"
msgid "Lock %{issuableDisplayName}"
-msgstr ""
+msgstr "锁定 %{issuableDisplayName}"
msgid "Lock not found"
-msgstr ""
-
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
+msgstr "未找到锁"
msgid "Locked"
msgstr "已锁定"
@@ -2128,15 +2553,27 @@ msgid "Locked Files"
msgstr "已锁定文件"
msgid "Locks give the ability to lock specific file or folder."
-msgstr ""
+msgstr "加锁可以锁定特定的文件或文件夹。"
msgid "Login"
msgstr "登录"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
-msgstr ""
+msgstr "GitLab Geo 可以创建 GitLab 实例的只读镜像, 使得从远端克隆和拉取大型代码仓库的时间大大缩短,提高团队成员的工作效率。"
+
+msgid "Manage all notifications"
+msgstr "管理全部通知"
+
+msgid "Manage group labels"
+msgstr "管理群组标记"
msgid "Manage labels"
+msgstr "管理标记"
+
+msgid "Manage project labels"
+msgstr "管理项目标记"
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
msgstr ""
msgid "Mar"
@@ -2146,7 +2583,7 @@ msgid "March"
msgstr "三月"
msgid "Mark done"
-msgstr ""
+msgstr "标记为已完成"
msgid "Maximum git storage failures"
msgstr "最大 git 存储失败"
@@ -2160,6 +2597,9 @@ msgstr "中位数"
msgid "Members"
msgstr "成员"
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr "合并请求"
@@ -2170,71 +2610,155 @@ msgid "Merge request"
msgstr "合并请求"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
-msgstr ""
-
-msgid "MergeRequest|Approved"
-msgstr ""
+msgstr "合并请求用于提出对项目的更改与他人讨论"
msgid "Merged"
-msgstr ""
+msgstr "已合并"
msgid "Messages"
msgstr "消息"
+msgid "Metrics - Influx"
+msgstr "指标 - Influx"
+
+msgid "Metrics - Prometheus"
+msgstr "指标 - Prometheus"
+
+msgid "Metrics|Business"
+msgstr "业务"
+
+msgid "Metrics|Create metric"
+msgstr "创建指标"
+
+msgid "Metrics|Edit metric"
+msgstr "编辑指标"
+
+msgid "Metrics|For grouping similar metrics"
+msgstr "用于分组类似指标"
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr "图表纵轴的标签。通常表示绘制单位。水平轴(X轴)一般表示时间。"
+
+msgid "Metrics|Legend label (optional)"
+msgstr "图例标签(可选)"
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr "必须是有效的 PromQL 查询。"
+
+msgid "Metrics|Name"
+msgstr "名称"
+
+msgid "Metrics|New metric"
+msgstr "创建指标"
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr "Prometheus查询文档"
+
+msgid "Metrics|Query"
+msgstr "查询"
+
+msgid "Metrics|Response"
+msgstr "响应"
+
+msgid "Metrics|System"
+msgstr "系统"
+
+msgid "Metrics|Type"
+msgstr "类型"
+
+msgid "Metrics|Unit label"
+msgstr "单位标签"
+
+msgid "Metrics|Used as a title for the chart"
+msgstr "用作图表的标题"
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr "用于查询返回单个系列时。如果返回多个系列,相应的图例标签将从返回数据中选取。"
+
+msgid "Metrics|Y-axis label"
+msgstr "Y轴标签"
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr "例如HTTP请求"
+
+msgid "Metrics|e.g. Requests/second"
+msgstr "例如每秒请求数"
+
+msgid "Metrics|e.g. Throughput"
+msgstr "例如吞吐量"
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr "速率(5分钟内所有http请求)"
+
+msgid "Metrics|e.g. req/sec"
+msgstr "例如每秒请求数"
+
msgid "Milestone"
-msgstr ""
+msgstr "里程碑"
msgid "Milestones|Delete milestone"
-msgstr ""
+msgstr "删除里程碑"
msgid "Milestones|Delete milestone %{milestoneTitle}?"
-msgstr ""
+msgstr "删除里程碑 %{milestoneTitle}?"
msgid "Milestones|Failed to delete milestone %{milestoneTitle}"
-msgstr ""
+msgstr "删除里程碑 %{milestoneTitle}失败"
msgid "Milestones|Milestone %{milestoneTitle} was not found"
-msgstr ""
+msgstr "未找到里程碑 %{milestoneTitle}"
+
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr "将 %{milestoneTitle} 升级为群组里程碑?"
+
+msgid "Milestones|Promote Milestone"
+msgstr "升级里程碑"
+
+msgid "Milestones|This action cannot be reversed."
+msgstr "该操作无法撤销。"
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "新建 SSH 公钥"
msgid "Modal|Cancel"
-msgstr ""
+msgstr "取消"
msgid "Modal|Close"
-msgstr ""
+msgstr "关闭"
msgid "Monitoring"
msgstr "监控"
+msgid "More info"
+msgstr "更多信息"
+
msgid "More information"
-msgstr ""
+msgstr "更多信息"
msgid "More information is available|here"
msgstr "帮助文档"
msgid "Move"
-msgstr ""
+msgstr "移动"
msgid "Move issue"
-msgstr ""
+msgstr "移动议题"
msgid "Multiple issue boards"
msgstr "多个议题看板"
msgid "Name new label"
-msgstr ""
+msgstr "命名新标记"
msgid "New Issue"
msgid_plural "New Issues"
msgstr[0] "新建议题"
msgid "New Kubernetes Cluster"
-msgstr ""
+msgstr "新建Kubernetes集群"
msgid "New Kubernetes cluster"
-msgstr ""
+msgstr "新建Kubernetes集群"
msgid "New Pipeline Schedule"
msgstr "创建流水线计划"
@@ -2249,7 +2773,7 @@ msgid "New directory"
msgstr "新建目录"
msgid "New epic"
-msgstr "新EPIC"
+msgstr "新建史诗故事"
msgid "New file"
msgstr "新建文件"
@@ -2261,13 +2785,13 @@ msgid "New issue"
msgstr "新建议题"
msgid "New label"
-msgstr ""
+msgstr "新建标记"
msgid "New merge request"
msgstr "新建合并请求"
msgid "New project"
-msgstr "新项目"
+msgstr "新建项目"
msgid "New schedule"
msgstr "新建计划"
@@ -2276,31 +2800,37 @@ msgid "New snippet"
msgstr "新建代码片段"
msgid "New subgroup"
-msgstr "新子群组"
+msgstr "新建子群组"
msgid "New tag"
msgstr "新建标签"
+msgid "No Label"
+msgstr "无标记"
+
msgid "No assignee"
-msgstr ""
+msgstr "未指派"
msgid "No changes"
-msgstr ""
+msgstr "无变更内容"
msgid "No connection could be made to a Gitaly Server, please check your logs!"
-msgstr ""
+msgstr "无法连接到Gitaly服务器,请检查相关日志!"
msgid "No due date"
-msgstr ""
+msgstr "无截止日期"
msgid "No estimate or time spent"
-msgstr ""
+msgstr "无估算或消耗的时间"
msgid "No file chosen"
-msgstr ""
+msgstr "未选定任何文件"
+
+msgid "No labels created yet."
+msgstr "尚未创建标记"
msgid "No repository"
-msgstr "没有存储库"
+msgstr "没有仓库"
msgid "No schedules"
msgstr "没有计划"
@@ -2309,19 +2839,37 @@ msgid "None"
msgstr "无"
msgid "Not allowed to merge"
-msgstr ""
+msgstr "不允许合并"
msgid "Not available"
msgstr "数据不足"
+msgid "Not available for private projects"
+msgstr "对私有项目不可用"
+
+msgid "Not available for protected branches"
+msgstr "对受保护的分支不可用"
+
msgid "Not confidential"
-msgstr ""
+msgstr "非机密"
msgid "Not enough data"
msgstr "数据不足"
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
-msgstr ""
+msgstr "请注意,master分支自动受保护。%{link_to_protected_branches}"
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr "提示:作为GitLab管理员,可以配置 %{github_integration_link},这将允许通过GitHub登录并允许连接Github代码仓库而不需要个人访问令牌。"
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr "提示:作为GitLab管理员,可以配置 %{github_integration_link},这将允许通过GitHub登录并允许导入Github代码仓库而不需要个人访问令牌。"
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr "提示:如GitLab管理员配置 %{github_integration_link},将允许通过GitHub登录并允许连接Github代码仓库而不需要个人访问令牌。"
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr "提示:如GitLab管理员配置 %{github_integration_link},将允许通过GitHub登录并允许导入Github代码仓库而不需要个人访问令牌。"
msgid "Notification events"
msgstr "通知事件"
@@ -2381,10 +2929,10 @@ msgid "Notifications"
msgstr "通知"
msgid "Notifications off"
-msgstr ""
+msgstr "禁用通知"
msgid "Notifications on"
-msgstr ""
+msgstr "启用通知"
msgid "Nov"
msgstr "十一"
@@ -2396,7 +2944,7 @@ msgid "Number of access attempts"
msgstr "尝试访问次数"
msgid "OK"
-msgstr ""
+msgstr "确定"
msgid "Oct"
msgstr "十"
@@ -2407,11 +2955,17 @@ msgstr "十月"
msgid "OfSearchInADropdown|Filter"
msgstr "筛选"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr "仓库导入后,可以通过 SSH 拉取镜像。了解更多 %{ssh_link}"
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr "只有项目成员可以发表评论。"
msgid "Open"
-msgstr ""
+msgstr "打开"
msgid "Opened"
msgstr "已打开"
@@ -2426,6 +2980,9 @@ msgid "Options"
msgstr "操作"
msgid "Otherwise it is recommended you start with one of the options below."
+msgstr "否则,建议您从下面的一个选项开始。"
+
+msgid "Outbound requests"
msgstr ""
msgid "Overview"
@@ -2434,6 +2991,9 @@ msgstr "概览"
msgid "Owner"
msgstr "所有者"
+msgid "Pages"
+msgstr "Pages"
+
msgid "Pagination|Last »"
msgstr "尾页 »"
@@ -2446,9 +3006,21 @@ msgstr "上一页"
msgid "Pagination|« First"
msgstr "« 首页"
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr "密码"
+msgid "Pending"
+msgstr "等待处理"
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr "个人访问凭证"
+
msgid "Pipeline"
msgstr "流水线"
@@ -2528,28 +3100,55 @@ msgid "Pipelines for last year"
msgstr "去年的流水线"
msgid "Pipelines|Build with confidence"
-msgstr ""
+msgstr "自信地构建"
+
+msgid "Pipelines|CI Lint"
+msgstr "CI 配置检查(CI Lint)"
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr "清除Runner缓存"
msgid "Pipelines|Get started with Pipelines"
-msgstr ""
+msgstr "流水线入门"
+
+msgid "Pipelines|Loading Pipelines"
+msgstr "载入流水线"
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr "项目缓存重置成功。"
+
+msgid "Pipelines|Run Pipeline"
+msgstr "运行流水线"
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr "清理runner缓存时发生错误。"
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr "当前没有 %{scope}的流水线。"
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr "当前没有流水线。"
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr "此项目当前未配置运行流水线。"
msgid "Pipeline|Retry pipeline"
-msgstr ""
+msgstr "重试流水线"
msgid "Pipeline|Retry pipeline #%{pipelineId}?"
-msgstr ""
+msgstr "重试流水线#%{pipelineId}吗?"
msgid "Pipeline|Stop pipeline"
-msgstr ""
+msgstr "停止流水线"
msgid "Pipeline|Stop pipeline #%{pipelineId}?"
-msgstr ""
+msgstr "停止流水线#%{pipelineId}吗?"
msgid "Pipeline|You’re about to retry pipeline %{pipelineId}."
-msgstr ""
+msgstr "即将重试流水线 %{pipelineId}。"
msgid "Pipeline|You’re about to stop pipeline %{pipelineId}."
-msgstr ""
+msgstr "即将停止流水线 %{pipelineId}。"
msgid "Pipeline|all"
msgstr "所有"
@@ -2563,20 +3162,29 @@ msgstr "于阶段"
msgid "Pipeline|with stages"
msgstr "于阶段"
-msgid "Play"
+msgid "PlantUML"
msgstr ""
+msgid "Play"
+msgstr "运行"
+
msgid "Please enable billing for one of your projects to be able to create a Kubernetes cluster, then try again."
-msgstr ""
+msgstr "请 为某个项目启用计费功能,以便能够创建Kubernetes群集,然后重试。"
msgid "Please solve the reCAPTCHA"
msgstr "请填写验证码。"
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr "连接代码仓库中,请稍候。可在任意时刻刷新以获取当前状态。"
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr "导入代码仓库中,请稍候。可在任意时刻刷新以获取当前状态。"
+
msgid "Preferences"
msgstr "偏好设置"
msgid "Primary"
-msgstr ""
+msgstr "主要"
msgid "Private - Project access must be granted explicitly to each user."
msgstr "私人 - 必须向每个用户明确授予项目访问权限。"
@@ -2585,7 +3193,7 @@ msgid "Private - The group and its projects can only be viewed by members."
msgstr "私人 - 群组及其项目只能由成员查看。"
msgid "Private projects can be created in your personal namespace with:"
-msgstr ""
+msgstr "私有项目可以在个人名称空间中创建:"
msgid "Profile"
msgstr "用户信息"
@@ -2626,9 +3234,12 @@ msgstr "您的帐户目前是这些群组的所有者:"
msgid "Profiles|your account"
msgstr "您的帐户"
-msgid "Programming languages used in this repository"
+msgid "Profiling - Performance bar"
msgstr ""
+msgid "Programming languages used in this repository"
+msgstr "当前代码仓库中使用的编程语言"
+
msgid "Project '%{project_name}' is in the process of being deleted."
msgstr "项目 “%{project_name}” 正在被删除。"
@@ -2645,13 +3256,10 @@ msgid "Project access must be granted explicitly to each user."
msgstr "项目访问权限必须明确授权给每个用户。"
msgid "Project avatar"
-msgstr ""
+msgstr "项目头像"
msgid "Project avatar in repository: %{link}"
-msgstr ""
-
-msgid "Project cache successfully reset."
-msgstr ""
+msgstr "项目头像在仓库中:%{link}"
msgid "Project details"
msgstr "项目详情"
@@ -2672,19 +3280,19 @@ msgid "ProjectActivityRSS|Subscribe"
msgstr "订阅"
msgid "ProjectCreationLevel|Allowed to create projects"
-msgstr ""
+msgstr "允许创建项目"
msgid "ProjectCreationLevel|Default project creation protection"
-msgstr ""
+msgstr "默认项目创建保护"
msgid "ProjectCreationLevel|Developers + Masters"
-msgstr ""
+msgstr "Developers + Masters"
msgid "ProjectCreationLevel|Masters"
-msgstr ""
+msgstr "Masters"
msgid "ProjectCreationLevel|No one"
-msgstr ""
+msgstr "禁止"
msgid "ProjectFeature|Disabled"
msgstr "停用"
@@ -2711,7 +3319,7 @@ msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "联系管理员更改此设置。"
msgid "ProjectSettings|Only signed commits can be pushed to this repository."
-msgstr "只有已签署提交才可以推送到此存储库。"
+msgstr "只有已签署提交才可以推送到此仓库。"
msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin."
msgstr "此设置已应用于服务器级别,可由管理员覆盖。"
@@ -2723,7 +3331,7 @@ msgid "ProjectSettings|This setting will be applied to all projects unless overr
msgstr "此设置将应用于所有项目,除非被管理员覆盖。"
msgid "ProjectSettings|Users can only push commits to this repository that were committed with one of their own verified emails."
-msgstr "用户只能通过自己已验证的电子邮件地址将提交到此存储库中。"
+msgstr "用户只能通过自己已验证的电子邮件地址将提交到此仓库中。"
msgid "Projects"
msgstr "项目"
@@ -2749,68 +3357,92 @@ msgstr "对不起,没有搜索到符合条件的项目"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "此功能需要浏览器支持 localStorage"
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr "找到%{exporters} 及 %{metrics}"
+
+msgid "PrometheusService|
"
+
msgid "PrometheusService|Active"
-msgstr ""
+msgstr "启用"
msgid "PrometheusService|Auto configuration"
-msgstr ""
+msgstr "自动配置"
msgid "PrometheusService|Automatically deploy and configure Prometheus on your clusters to monitor your project’s environments"
-msgstr ""
+msgstr "自动部署和配置Prometheus到集群来监测项目的环境"
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr "默认情况下,Prometheus 侦听 ‘http://localhost:9090’。不建议更改默认地址和端口,因为这可能会影响或冲突在 GitLab 服务器上运行的其他服务。"
+msgid "PrometheusService|Common metrics"
+msgstr "常用指标"
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr "常用指标会根据应用广泛的导出器指标库自动监控。"
+
+msgid "PrometheusService|Custom metrics"
+msgstr "自定义指标"
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr "查找和配置指标..."
+msgid "PrometheusService|Finding custom metrics..."
+msgstr "查找自定义指标..."
+
msgid "PrometheusService|Install Prometheus on clusters"
-msgstr ""
+msgstr "在群集上安装Prometheus"
msgid "PrometheusService|Manage clusters"
-msgstr ""
+msgstr "管理集群"
msgid "PrometheusService|Manual configuration"
-msgstr ""
+msgstr "手动配置"
msgid "PrometheusService|Metrics"
msgstr "指标"
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr "指标会根据指定的指标库自动配置和监控。"
-
msgid "PrometheusService|Missing environment variable"
msgstr "没有环境变量"
-msgid "PrometheusService|Monitored"
-msgstr "监测"
-
msgid "PrometheusService|More information"
msgstr "更多的信息"
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
-msgstr "没有监测指标。要开始监测,请部署到环境中。"
+msgid "PrometheusService|New metric"
+msgstr "新建指标"
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Prometheus API 地址,例如 http://prometheus.example.com/"
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
-msgstr ""
+msgstr "Prometheus正在被群集自动管理"
+
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr "在首次部署到某环境之后, 这些指标才会被监控"
msgid "PrometheusService|Time-series monitoring service"
-msgstr ""
+msgstr "时间序列监控服务"
msgid "PrometheusService|To enable manual configuration, uninstall Prometheus from your clusters"
-msgstr ""
+msgstr "如需启用手动配置,请从群集中卸载Prometheus"
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
-msgstr ""
+msgstr "如需在群集上启用Prometheus的安装,请取消以下的手动配置"
-msgid "PrometheusService|View environments"
-msgstr "查看环境"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr "等待首次部署到环境以查找常用指标"
+
+msgid "Promote"
+msgstr "升级"
+
+msgid "Promote to Group Label"
+msgstr "升级到群组标记"
+
+msgid "Promote to Group Milestone"
+msgstr "升级到群组里程碑"
msgid "Protip:"
-msgstr ""
+msgstr "专家提示:"
msgid "Public - The group and any public projects can be viewed without any authentication."
msgstr "公开 - 群组和任何公共项目可以在没有任何身份验证的情况下查看。"
@@ -2825,23 +3457,26 @@ msgid "Push events"
msgstr "推送事件"
msgid "Push project from command line"
-msgstr ""
+msgstr "从命令行推送项目"
msgid "Push to create a project"
-msgstr ""
+msgstr "通过推送创建项目"
msgid "PushRule|Committer restriction"
msgstr "提交限制"
msgid "Quick actions can be used in the issues description and comment boxes."
-msgstr ""
+msgstr "快速操作可用于议题描述和评论框。"
msgid "Read more"
-msgstr "了解更多"
+msgstr "进一步了解"
msgid "Readme"
msgstr "自述文件"
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "分支"
@@ -2849,10 +3484,10 @@ msgid "RefSwitcher|Tags"
msgstr "标签"
msgid "Reference:"
-msgstr ""
+msgstr "引用:"
msgid "Register / Sign In"
-msgstr ""
+msgstr "注册/登录"
msgid "Registry"
msgstr "注册表"
@@ -2875,25 +3510,40 @@ msgstr "相关的合并请求"
msgid "Related Merged Requests"
msgstr "相关已合并的合并请求"
+msgid "Related merge requests"
+msgstr "相关合并请求"
+
msgid "Remind later"
msgstr "稍后提醒"
msgid "Remove"
-msgstr ""
+msgstr "删除"
msgid "Remove avatar"
-msgstr ""
+msgstr "删除头像"
msgid "Remove project"
msgstr "删除项目"
msgid "Repair authentication"
-msgstr ""
+msgstr "修复认证"
+
+msgid "Repo by URL"
+msgstr "从URL导入仓库"
msgid "Repository"
-msgstr "存储库"
+msgstr "仓库"
msgid "Repository has no locks."
+msgstr "当前仓库无加锁文件。"
+
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
msgstr ""
msgid "Request Access"
@@ -2909,11 +3559,14 @@ msgid "Reset runners registration token"
msgstr "重置 Runner 注册令牌"
msgid "Resolve discussion"
-msgstr ""
+msgstr "解决讨论"
+
+msgid "Response"
+msgstr "响应"
msgid "Reveal value"
msgid_plural "Reveal values"
-msgstr[0] ""
+msgstr[0] "显示值"
msgid "Revert this commit"
msgstr "还原此提交"
@@ -2921,7 +3574,34 @@ msgstr "还原此提交"
msgid "Revert this merge request"
msgstr "还原此合并请求"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr "检查"
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
+msgstr "路线图"
+
+msgid "Run CI/CD pipelines for external repositories"
+msgstr "使用外部仓库的CI/CD流水线"
+
+msgid "Runners"
+msgstr "Runner"
+
+msgid "Running"
+msgstr "运行中"
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
msgstr ""
msgid "SSH Keys"
@@ -2934,11 +3614,14 @@ msgid "Save pipeline schedule"
msgstr "保存流水线计划"
msgid "Save variables"
-msgstr ""
+msgstr "保存变量"
msgid "Schedule a new pipeline"
msgstr "新建流水线计划"
+msgid "Scheduled"
+msgstr "已加入日程"
+
msgid "Schedules"
msgstr "日程"
@@ -2948,17 +3631,20 @@ msgstr "流水线计划"
msgid "Scoped issue boards"
msgstr "议题看板范围"
+msgid "Search"
+msgstr "搜索"
+
msgid "Search branches and tags"
msgstr "搜索分支和标签"
msgid "Search milestones"
-msgstr ""
+msgstr "搜索里程碑"
msgid "Search project"
-msgstr ""
+msgstr "搜索项目"
msgid "Search users"
-msgstr ""
+msgstr "搜索用户"
msgid "Seconds before reseting failure information"
msgstr "重置失败信息等待时间(秒)"
@@ -2967,10 +3653,10 @@ msgid "Seconds to wait for a storage access attempt"
msgstr "等待存储访问尝试时间(秒)"
msgid "Secret variables"
-msgstr ""
+msgstr "加密变量"
msgid "Security report"
-msgstr ""
+msgstr "安全报告"
msgid "Select Archive Format"
msgstr "选择下载格式"
@@ -2979,22 +3665,22 @@ msgid "Select a timezone"
msgstr "选择时区"
msgid "Select an existing Kubernetes cluster or create a new one"
-msgstr ""
+msgstr "选择一个既有的Kubernetes集群或者创建一个新的"
msgid "Select assignee"
-msgstr ""
+msgstr "选择指派人"
msgid "Select branch/tag"
-msgstr ""
+msgstr "选择分支/标签"
msgid "Select target branch"
msgstr "选择目标分支"
msgid "Selective synchronization"
-msgstr ""
+msgstr "选择性同步"
msgid "Send email"
-msgstr ""
+msgstr "发送电子邮件"
msgid "Sep"
msgstr "九"
@@ -3003,23 +3689,41 @@ msgid "September"
msgstr "九月"
msgid "Server version"
-msgstr ""
+msgstr "服务器版本"
msgid "Service Templates"
msgstr "服务模板"
msgid "Service URL"
-msgstr ""
+msgstr "服务URL"
+
+msgid "Session expiration, projects limit and attachment size."
+msgstr "会话有效期,项目限制及附件大小。"
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "为账号创建一个用于推送或拉取的 %{protocol} 密码。"
-msgid "Set up CI/CD"
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr "设定缺省及受限可见性级别。配置导入来源及git访问协议。"
+
+msgid "Set max session time for web terminal."
msgstr ""
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr "设定用户登录的条件。启用强制双重认证。"
+
+msgid "Set up CI/CD"
+msgstr "配置 CI/CD"
+
msgid "Set up Koding"
msgstr "设置 Koding"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "设置密码"
@@ -3027,19 +3731,22 @@ msgid "Settings"
msgstr "设置"
msgid "Setup a specific Runner automatically"
+msgstr "自动创建独享Runner"
+
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
msgstr ""
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
-msgstr ""
+msgstr "通过重置此命名空间的流水线分钟数,当前使用的分钟数将被归零。"
msgid "SharedRunnersMinutesSettings|Reset pipeline minutes"
-msgstr ""
+msgstr "重置流水线分钟数"
msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes"
-msgstr ""
+msgstr "重置已用流水线分钟数"
msgid "Show command"
-msgstr ""
+msgstr "显示命令"
msgid "Show parent pages"
msgstr "查看上级页面"
@@ -3063,29 +3770,35 @@ msgstr "无"
msgid "Sidebar|Weight"
msgstr "权重"
+msgid "Sign-in restrictions"
+msgstr "登录限制"
+
+msgid "Sign-up restrictions"
+msgstr "注册限制"
+
+msgid "Size and domain settings for static websites"
+msgstr "静态网站的大小和域设置"
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr "代码片段"
msgid "Something went wrong on our end"
-msgstr ""
+msgstr "出错了,抱歉。"
msgid "Something went wrong on our end."
-msgstr "发生了错误。"
-
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr "试图改变 ${this.issuableDisplayName} 的锁定状态时出错了"
+msgstr "出错了,抱歉。"
msgid "Something went wrong when toggling the button"
-msgstr ""
+msgstr "点击按钮时出错"
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
-msgstr ""
+msgid "Something went wrong while fetching Dependency Scanning."
+msgstr "读取依赖扫描结果时发生错误。"
msgid "Something went wrong while fetching SAST."
-msgstr ""
+msgstr "读取SAST 时出错。"
msgid "Something went wrong while fetching the projects."
msgstr "拉取项目时发生错误。"
@@ -3093,14 +3806,8 @@ msgstr "拉取项目时发生错误。"
msgid "Something went wrong while fetching the registry list."
msgstr "拉取注册表列表时发生错误。"
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
-msgstr ""
+msgstr "出现错误。请重试。"
msgid "Sort by"
msgstr "排序"
@@ -3124,13 +3831,13 @@ msgid "SortOptions|Due soon"
msgstr "即将截止"
msgid "SortOptions|Label priority"
-msgstr "标签优先"
+msgstr "标记优先"
msgid "SortOptions|Largest group"
msgstr "最大群组"
msgid "SortOptions|Largest repository"
-msgstr "最大存储库"
+msgstr "最大仓库"
msgid "SortOptions|Last created"
msgstr "最近创建"
@@ -3205,7 +3912,7 @@ msgid "Source"
msgstr "源"
msgid "Source (branch or tag)"
-msgstr ""
+msgstr "源(分支或标签)"
msgid "Source code"
msgstr "源代码"
@@ -3216,12 +3923,21 @@ msgstr "源不可用"
msgid "Spam Logs"
msgstr "垃圾信息日志"
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr "在 Runner 设置时指定以下 URL:"
msgid "StarProject|Star"
msgstr "星标"
+msgid "Starred Projects"
+msgstr "已星标项目"
+
+msgid "Starred Projects' Activity"
+msgstr "已星标项目的活动"
+
msgid "Starred projects"
msgstr "已星标项目"
@@ -3231,11 +3947,20 @@ msgstr "由此更改 %{new_merge_request}"
msgid "Start the Runner!"
msgstr "启动 Runner!"
+msgid "Started"
+msgstr "已启动"
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr "状态"
+
msgid "Stopped"
msgstr "已停止"
msgid "Storage"
-msgstr ""
+msgstr "存储"
msgid "Subgroups"
msgstr "子群组"
@@ -3243,12 +3968,18 @@ msgstr "子群组"
msgid "Switch branch/tag"
msgstr "切换分支/标签"
+msgid "System"
+msgstr "系统"
+
msgid "System Hooks"
msgstr "系统钩子"
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
-msgstr[0] ""
+msgstr[0] "标签(%{tag_count})"
msgid "Tags"
msgstr "标签"
@@ -3284,10 +4015,10 @@ msgid "TagsPage|Filter by tag name"
msgstr "根据标签名称过滤"
msgid "TagsPage|New Tag"
-msgstr "新标签"
+msgstr "新建标签"
msgid "TagsPage|New tag"
-msgstr "新标签"
+msgstr "新建标签"
msgid "TagsPage|Optionally, add a message to the tag."
msgstr "(可选)添加一条消息到标签。"
@@ -3308,7 +4039,7 @@ msgid "TagsPage|Tags"
msgstr "标签"
msgid "TagsPage|Tags give the ability to mark specific points in history as being important"
-msgstr "标签具有在提交历史上标记特定提交的能力"
+msgstr "使用标签,可以标记提交历史上的特定点为重要提交"
msgid "TagsPage|This tag has no release notes."
msgstr "此标签没有发行说明。"
@@ -3325,6 +4056,9 @@ msgstr "已保护"
msgid "Target Branch"
msgstr "目标分支"
+msgid "Target branch"
+msgstr "目标分支"
+
msgid "Team"
msgstr "团队"
@@ -3332,13 +4066,16 @@ msgid "Thanks! Don't show me this again"
msgstr "谢谢 ! 请不要再显示"
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
-msgstr "GitLab 中的高级全局搜索功能是非常强大的搜索服务。您可以搜索其他团队的代码以帮助您完善自己项目中的代码。从而避免创建重复的代码和浪费时间。"
+msgstr "GitLab 中的高级全局搜索是一项功能强大的搜索服务,有助于节约项目开发时间。您可以搜索其他团队的代码中对自己项目有帮助的部分加以利用,从而避免创建重复代码和浪费时间。"
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project"
-msgstr ""
+msgstr "议题跟踪用于管理需要改进或者解决的问题"
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
-msgstr ""
+msgstr "议题跟踪用于管理需要改进或者解决的问题。请注册或登录后为当前项目创建议题。"
+
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr "在需要相互 TLS 与外部授权服务通信时使用的 X509 证书。如果保留为空, 则在访问 HTTPS 时仍然验证服务器证书。"
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "编码阶段概述了从第一次提交到创建合并请求的时间。创建第一个合并请求后,数据将自动添加到此处。"
@@ -3346,14 +4083,20 @@ msgstr "编码阶段概述了从第一次提交到创建合并请求的时间。
msgid "The collection of events added to the data gathered for that stage."
msgstr "与该阶段相关的事件集合。"
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr "该连接将在 %{timeout}后超时。对于需要长于该时间才能导入的仓库,请使用克隆/推送组合。"
+
msgid "The fork relationship has been removed."
msgstr "派生关系已被删除。"
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr "该导入过程将在 %{timeout}后超时。对于需要长于该时间才能导入的仓库,请使用克隆/推送组合。"
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "议题阶段概述了从创建议题到将议题添加到里程碑或议题看板所花费的时间。创建第一个议题后,数据将自动添加到此处.。"
msgid "The maximum file size allowed is 200KB."
-msgstr ""
+msgstr "文件大小限制为 200KB。"
msgid "The number of attempts GitLab will make to access a storage."
msgstr "GitLab 访问存储的次数。"
@@ -3361,12 +4104,18 @@ msgstr "GitLab 访问存储的次数。"
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr "GitLab 将完全阻止访问存储的故障次数。可以在管理界面%{link_to_health_page}或使用%{api_documentation_link}重置故障次数。"
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr "解密私钥所需的密码短语。该项为可选项, 并且内容被加密存储。"
+
msgid "The phase of the development lifecycle."
msgstr "项目生命周期中的各个阶段。"
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr "计划阶段概述了从议题添加到日程到推送首次提交的时间。当首次推送提交后,数据将自动添加到此处。"
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr "提供客户端证书时使用的私钥。该值被加密存储。"
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr "生产阶段概述了从创建一个议题到将代码部署到生产环境的总时间。当完成想法到部署生产的循环,数据将自动添加到此处。"
@@ -3377,16 +4126,19 @@ msgid "The project can be accessed without any authentication."
msgstr "该项目允许任何人访问。"
msgid "The repository for this project does not exist."
-msgstr "此项目的存储库不存在。"
+msgstr "此项目的仓库不存在。"
msgid "The repository for this project is empty"
-msgstr ""
+msgstr "该项目的仓库是空的"
+
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr "该仓库必须可通过http://, https:// 或 git://进行访问。"
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "评审阶段概述了从创建合并请求到被合并的时间。当创建第一个合并请求后,数据将自动添加到此处。"
msgid "The roadmap shows the progress of your epics along a timeline"
-msgstr ""
+msgstr "路线图显示了史诗故事沿着时间线的进展情况"
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "预发布阶段概述了从合并请求被合并到部署至生产环境的总时间。首次部署到生产环境后,数据将自动添加到此处。"
@@ -3401,7 +4153,7 @@ msgid "The time in seconds GitLab will try to access storage. After this time a
msgstr "GitLab 将尝试访问存储的时间(秒)。在此时间之后将引发超时错误。"
msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check."
-msgstr ""
+msgstr "存储检查之间的时间间隔(秒)。如上次检查尚未完成,GitLab将跳过当前检查。"
msgid "The time taken by each data entry gathered by that stage."
msgstr "该阶段每条数据所花的时间"
@@ -3410,46 +4162,49 @@ msgid "The value lying at the midpoint of a series of observed values. E.g., bet
msgstr "中位数是一个数列中最中间的值。例如在 3、5、9 之间,中位数是 5。在 3、5、7、8 之间,中位数是 (5 + 7)/ 2 = 6。"
msgid "There are no issues to show"
-msgstr ""
+msgstr "当前无议题"
msgid "There are no merge requests to show"
-msgstr ""
+msgstr "当前无合并请求"
msgid "There are problems accessing Git storage: "
msgstr "访问 Git 存储时出现问题:"
+msgid "There was an error loading results"
+msgstr "加载结果时出错"
+
msgid "There was an error loading users activity calendar."
-msgstr ""
+msgstr "加载用户活动日历时出错。"
msgid "There was an error saving your notification settings."
-msgstr ""
+msgstr "保存通知设置时发生错误。"
msgid "There was an error subscribing to this label."
-msgstr ""
+msgstr "订阅此标记时出错。"
msgid "There was an error when reseting email token."
-msgstr ""
+msgstr "重置电子邮件令牌时出错。"
msgid "There was an error when subscribing to this label."
-msgstr ""
+msgstr "订阅此标记时出错。"
msgid "There was an error when unsubscribing from this label."
-msgstr ""
+msgstr "取消订阅此标记时出错。"
msgid "This board\\'s scope is reduced"
msgstr "这个看板的范围缩小了"
msgid "This directory"
-msgstr ""
+msgstr "当前目录"
msgid "This is a confidential issue."
msgstr "这是一个机密议题。"
msgid "This is the author's first Merge Request to this project."
-msgstr "这是作者为项目贡献的第一个合并请求。"
+msgstr "这是作者为当前项目贡献的第一个合并请求。"
msgid "This issue is confidential"
-msgstr ""
+msgstr "当前问题为私密问题"
msgid "This issue is confidential and locked."
msgstr "这个是机密且已锁定的议题。"
@@ -3458,37 +4213,40 @@ msgid "This issue is locked."
msgstr "此议题已锁定。"
msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr ""
+msgstr "当前作业需要用户触发其过程。此类作业通常用于将代码部署到生产环境"
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
-msgstr ""
+msgstr "当前作业需在上级作业成功后才可被启动。"
msgid "This job has not been triggered yet"
-msgstr ""
+msgstr "作业还未被触发"
msgid "This job has not started yet"
-msgstr ""
+msgstr "作业还未开始"
msgid "This job is in pending state and is waiting to be picked by a runner"
-msgstr ""
+msgstr "作业挂起中,等待进入队列"
msgid "This job requires a manual action"
-msgstr ""
+msgstr "作业需手工操作"
msgid "This means you can not push code until you create an empty repository or import existing one."
-msgstr "在创建一个空的存储库或导入现有存储库之前,将无法推送代码。"
+msgstr "在创建一个空的仓库或导入现有仓库之前,将无法推送代码。"
msgid "This merge request is locked."
msgstr "此合并请求已锁定。"
msgid "This page is unavailable because you are not allowed to read information across multiple projects."
-msgstr ""
+msgstr "此页面不可用,您无权跨项目阅读相关信息。"
msgid "This project"
-msgstr ""
+msgstr "当前项目"
msgid "This repository"
-msgstr ""
+msgstr "当前仓库"
+
+msgid "This will delete the custom metric, Are you sure?"
+msgstr "此操作将删除自定义指标,确定继续吗?"
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr "这些电子邮件自动生成为问题(评论生成为电子邮件对话)在这里列出。"
@@ -3502,20 +4260,26 @@ msgstr "开始进行编码前的时间"
msgid "Time between merge request creation and merge/close"
msgstr "从创建合并请求到被合并或关闭的时间"
-msgid "Time tracking"
+msgid "Time between updates and capacity settings."
msgstr ""
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr "GitLab等待外部服务的响应时间(秒)。当服务没有及时响应时,访问将被拒绝。"
+
+msgid "Time tracking"
+msgstr "工时统计"
+
msgid "Time until first merge request"
msgstr "创建第一个合并请求之前的时间"
msgid "TimeTrackingEstimated|Est"
-msgstr ""
+msgstr "预计"
msgid "TimeTracking|Estimated:"
-msgstr ""
+msgstr "预计:"
msgid "TimeTracking|Spent"
-msgstr ""
+msgstr "已用:"
msgid "Timeago|%s days ago"
msgstr " %s 天前"
@@ -3652,25 +4416,55 @@ msgid "Time|s"
msgstr "秒"
msgid "Tip:"
-msgstr ""
+msgstr "提示:"
msgid "Title"
msgstr "标题"
-msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
+msgid "To GitLab"
+msgstr "到GitLab"
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr "可以使用 %{personal_access_token_link}连接GitHub仓库。当创建个人访问令牌时,需要选择 repo 范围,以显示可供连接的公共和私有的仓库列表。"
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr "要连接GitHub仓库,首先需要授权GitLab访问列表中的GitHub仓库:"
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr "要连接SVN仓库,请查看 %{svn_link}。"
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr "可以使用 %{personal_access_token_link}导入GitHub仓库。当创建个人访问令牌时,需要选择 repo 范围,以显示可导入的公共和私有的仓库列表。"
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr "要导入GitHub仓库,首先需要授权GitLab访问列表中的GitHub仓库:"
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr "要导入SVN仓库,请查看 %{svn_link}。"
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr "要仅为外部仓库使用CI / CD功能时,请选择使用外部仓库运行CI/CD。"
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr "如需验证GitLab CI设置,请访问当前项目的'CI/CD → 流水线',然后点击'CI Lint'按钮。"
+
+msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
+msgstr "如需查看路线图,请将计划的开始或结束日期添加到当前群组或其子组中的某个史诗故事。只显示过去3个月和接下来3个月的史诗故事。"
+
msgid "Todo"
-msgstr ""
+msgstr "待办事项"
msgid "Toggle sidebar"
-msgstr ""
+msgstr "切换边栏"
msgid "ToggleButton|Toggle Status: OFF"
-msgstr ""
+msgstr "切换状态:关闭"
msgid "ToggleButton|Toggle Status: ON"
-msgstr ""
+msgstr "切换状态:开启"
msgid "Total Time"
msgstr "总时间"
@@ -3679,46 +4473,40 @@ msgid "Total test time for all commits/merges"
msgstr "所有提交和合并的总测试时间"
msgid "Total: %{total}"
-msgstr ""
+msgstr "总计:%{total}"
msgid "Track activity with Contribution Analytics."
msgstr "跟踪活动与贡献的分析。"
msgid "Track groups of issues that share a theme, across projects and milestones"
-msgstr "在项目和里程碑之间跟踪共享主题的议题组"
+msgstr "在不同项目和里程碑中跟踪具有同一主题的议题组"
msgid "Track time with quick actions"
-msgstr ""
+msgstr "使用快捷操作来统计工时"
msgid "Trigger this manual action"
-msgstr ""
+msgstr "触发此手动操作"
msgid "Turn on Service Desk"
msgstr "打开服务台"
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
-msgstr ""
+msgstr "未知的"
msgid "Unlock"
msgstr "解锁"
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr "已解锁"
msgid "Unresolve discussion"
-msgstr ""
+msgstr "待解决的讨论"
msgid "Unstar"
msgstr "取消星标"
msgid "Up to date"
-msgstr ""
+msgstr "已是最新"
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "升级您的方案以启用高级全局搜索。"
@@ -3742,11 +4530,17 @@ msgid "Upload file"
msgstr "上传文件"
msgid "Upload new avatar"
-msgstr ""
+msgstr "上传新头像"
msgid "UploadLink|click to upload"
msgstr "点击上传"
+msgid "Upvotes"
+msgstr "顶"
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr "使用服务台在GitLab内部通过电子邮件与用户联系(例如提供客户支持)"
@@ -3756,24 +4550,51 @@ msgstr "在安装过程中使用以下注册令牌:"
msgid "Use your global notification setting"
msgstr "使用全局通知设置"
-msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
+msgid "Used by members to sign in to your group in GitLab"
msgstr ""
-msgid "View epics list"
+msgid "User and IP Rate Limits"
msgstr ""
+msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
+msgstr "变量通过runner作用于环境中。可将变量限制为仅受保护的分支或标签可以访问。可以使用变量来保存密码、密钥或任何其他内容。"
+
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr "查看和编辑行"
+
+msgid "View epics list"
+msgstr "查看史诗故事列表"
+
msgid "View file @ "
msgstr "浏览文件 @ "
+msgid "View group labels"
+msgstr "查看群组标记"
+
msgid "View labels"
-msgstr ""
+msgstr "查看标记"
msgid "View open merge request"
msgstr "查看待处理的合并请求"
+msgid "View project labels"
+msgstr "查看项目标记"
+
msgid "View replaced file @ "
msgstr "查看替换文件 @ "
+msgid "Visibility and access controls"
+msgstr "可见性与访问控制"
+
msgid "VisibilityLevel|Internal"
msgstr "内部"
@@ -3790,7 +4611,7 @@ msgid "Want to see the data? Please ask an administrator for access."
msgstr "权限不足。如需查看相关数据,请向管理员申请权限。"
msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again."
-msgstr ""
+msgstr "无法验证您在 GCP 上的某个项目是否启用了计费。请重试。"
msgid "We don't have enough data to show this stage."
msgstr "该阶段的数据不足,无法显示。"
@@ -3799,6 +4620,9 @@ msgid "We want to be sure it is you, please confirm you are not a robot."
msgstr "我们要确定你是不是机器人。"
msgid "Web IDE"
+msgstr "Web IDE"
+
+msgid "Web terminal"
msgstr ""
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
@@ -3807,6 +4631,9 @@ msgstr "如果有新的推送或新的议题,Webhook将自动触发您设置UR
msgid "Weight"
msgstr "权重"
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr "将URL保留为空白时,仍可指定分类标签,而无需禁用跨项目功能或执行外部授权检查。"
+
msgid "Wiki"
msgstr "Wiki"
@@ -3826,10 +4653,10 @@ msgid "WikiClone|Start Gollum and edit locally"
msgstr "启动 Gollum 并在本地编辑"
msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title."
-msgstr ""
+msgstr "提示:可以通过将路径添加到标题开头来移动此页面。"
msgid "WikiEdit|There is already a page with the same title in that path."
-msgstr ""
+msgstr "在该路径中已经有一个具有相同标题的页面。"
msgid "WikiEmptyPageError|You are not allowed to create wiki pages"
msgstr "您不能创建 wiki 页面"
@@ -3922,37 +4749,43 @@ msgid "Withdraw Access Request"
msgstr "取消权限申请"
msgid "Write a commit message..."
-msgstr ""
+msgstr "填写提交信息..."
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "即将删除 %{group_name}。已删除的群组无法恢复!确定继续吗?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "即将要删除 %{project_name_with_namespace}。已删除的项目无法恢复!确定继续吗?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr "将要删除 %{project_full_name}。删除后将无法恢复!确定执行此操作?"
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "即将删除与源项目 %{forked_from_project} 的派生关系。确定继续吗?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "即将 %{project_name_with_namespace} 转移给另一个所有者。确定继续吗?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr "将要把 %{project_full_name} 转移给另一个所有者。确定执行此操作?"
+
+msgid "You are on a read-only GitLab instance."
+msgstr "当前正在访问只读 GitLab 实例。"
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr "当前正在访问Geo次(只读)节点。如需进行任何写入操作,必须访问%{primary_node}。"
msgid "You can also create a project from the command line."
-msgstr ""
+msgstr "可以使用命令行来创建项目。"
msgid "You can also star a label to make it a priority label."
-msgstr ""
+msgstr "可以通过为标记设置星标来提高其优先级。"
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
-msgstr ""
+msgstr "可以轻松地在Kubernetes群集上安装Runner。 %{link_to_help_page}"
msgid "You can move around the graph by using the arrow keys."
-msgstr ""
+msgstr "可以使用方向键移动图形。"
msgid "You can only add files when you are on a branch"
msgstr "只能在分支上添加文件"
msgid "You can only edit files when you are on a branch"
-msgstr ""
+msgstr "只能在分支上编辑文件"
msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead."
msgstr "您不能写入只读的辅助 GitLab Geo 实例。请改用%{link_to_primary_node}。"
@@ -3961,22 +4794,22 @@ msgid "You cannot write to this read-only GitLab instance."
msgstr "您不能写入这个只读的 GitLab 实例。"
msgid "You do not have the correct permissions to override the settings from the LDAP group sync."
-msgstr ""
+msgstr "没有足够权限来修改LDAP组同步中的设置。"
msgid "You have no permissions"
-msgstr ""
+msgstr "没有权限"
msgid "You have reached your project limit"
msgstr "您已达到项目数量限制"
msgid "You must have master access to force delete a lock"
-msgstr ""
+msgstr "必须拥有 master 权限才能强制解除锁定"
msgid "You must sign in to star a project"
msgstr "必须登录才能对项目加星标"
msgid "You need a different license to enable FileLocks feature"
-msgstr ""
+msgstr "需要使用与当前不同的许可(license)才能启用FileLocks功能"
msgid "You need permission."
msgstr "需要相关的权限。"
@@ -4006,13 +4839,31 @@ msgid "You won't be able to pull or push project code via SSH until you add an S
msgstr "在您的个人资料中添加SSH密钥之前,您不能通过SSH来拉取或推送项目代码。"
msgid "You'll need to use different branch names to get a valid comparison."
-msgstr ""
+msgstr "需要使用不同的分支才能进行有效的比较。"
+
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr "您收到这封电子邮件是因为你在 %{host} 拥有帐户。 %{manage_notifications_link} · %{help_link}"
+
+msgid "Your Groups"
+msgstr "您的群组"
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
+msgstr "在此页面上的Kubernetes群集信息仍可编辑,但建议您禁用并重新配置"
+
+msgid "Your Projects (default)"
+msgstr "您的项目 (默认值)"
+
+msgid "Your Projects' Activity"
+msgstr "您的项目活动"
+
+msgid "Your Todos"
+msgstr "您的待办事项"
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr "合并请求已开启,可以提交变更到%{branch_name}。"
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
-msgstr ""
+msgstr "更改已提交。提交 %{commitId} %{commitStats}"
msgid "Your comment will not be visible to the public."
msgstr "您的评论将不会公开显示。"
@@ -4026,8 +4877,15 @@ msgstr "您的名字"
msgid "Your projects"
msgstr "您的项目"
+msgid "among other things"
+msgstr "除其他事项外"
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] "及%d个修复的漏洞"
+
msgid "assign yourself"
-msgstr ""
+msgstr "分配给自己"
msgid "branch name"
msgstr "分支名称"
@@ -4035,253 +4893,321 @@ msgstr "分支名称"
msgid "by"
msgstr "来自"
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr "%{type} 未发现新的安全漏洞"
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr "%{type} 未发现安全漏洞"
+
msgid "ciReport|Code quality"
-msgstr ""
+msgstr "代码质量"
msgid "ciReport|DAST detected no alerts by analyzing the review app"
-msgstr ""
+msgstr "DAST在审阅应用中未检测到告警"
+
+msgid "ciReport|Dependency scanning"
+msgstr "依赖关系扫描"
+
+msgid "ciReport|Dependency scanning detected"
+msgstr "依赖关系扫描检测到"
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr "依赖关系扫描未检测到新的安全漏洞"
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr "依赖关系扫描未检测到安全漏洞"
msgid "ciReport|Failed to load %{reportName} report"
-msgstr ""
+msgstr "无法加载 %{reportName} 报告"
msgid "ciReport|Fixed:"
-msgstr ""
+msgstr "失败:"
msgid "ciReport|Instances"
-msgstr ""
+msgstr "实例"
msgid "ciReport|Learn more about whitelisting"
-msgstr ""
+msgstr "进一步了解关于白名单的信息"
msgid "ciReport|Loading %{reportName} report"
-msgstr ""
+msgstr "载入%{reportName} 报告"
msgid "ciReport|No changes to code quality"
-msgstr ""
+msgstr "代码质量无变化"
msgid "ciReport|No changes to performance metrics"
-msgstr ""
+msgstr "性能指标无变化"
msgid "ciReport|Performance metrics"
-msgstr ""
+msgstr "性能指标"
msgid "ciReport|SAST"
-msgstr ""
-
-msgid "ciReport|SAST degraded on"
-msgstr ""
+msgstr "SAST"
msgid "ciReport|SAST detected"
-msgstr ""
+msgstr "SAST检测到"
msgid "ciReport|SAST detected no new security vulnerabilities"
-msgstr ""
+msgstr "SAST未发现新的安全漏洞"
msgid "ciReport|SAST detected no security vulnerabilities"
-msgstr ""
+msgstr "SAST未发现安全漏洞"
msgid "ciReport|SAST:container no vulnerabilities were found"
-msgstr ""
+msgstr "SAST:container未发现漏洞"
+
+msgid "ciReport|Security scanning"
+msgstr "安全扫描"
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr "安全扫描无法加载任何结果"
msgid "ciReport|Show complete code vulnerabilities report"
-msgstr ""
+msgstr "显示完整的代码漏洞报告"
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
-msgstr ""
+msgstr "未批准的漏洞 (红色) 可以标记为已批准。 %{helpLink}"
-msgid "ciReport|no security vulnerabilities"
-msgstr ""
+msgid "ciReport|no vulnerabilities"
+msgstr "未检测到安全漏洞"
msgid "command line instructions"
-msgstr ""
+msgstr "命令行指南"
-msgid "commit"
-msgstr "提交"
+msgid "connecting"
+msgstr "连接中"
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
-msgstr ""
+msgid "could not read private key, is the passphrase correct?"
+msgstr "无法读取私钥,密码短语是否正确?"
msgid "day"
msgid_plural "days"
msgstr[0] "天"
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] "检测到%d个安全漏洞已修复"
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] "检测到%d个新的安全漏洞"
+
+msgid "detected no vulnerabilities"
+msgstr "未检测到安全漏洞"
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
-msgstr ""
+msgstr "最后一次%{slash_command} 命令将更新预计时间。"
+
+msgid "here"
+msgstr "此处"
+
+msgid "importing"
+msgstr "导入中"
+
+msgid "in progress"
+msgstr "进行中"
msgid "is invalid because there is downstream lock"
-msgstr ""
+msgstr "因下游锁定而无效"
msgid "is invalid because there is upstream lock"
-msgstr ""
+msgstr "因上游锁定而无效"
+
+msgid "is not a valid X509 certificate."
+msgstr "不是有效的X509证书。"
msgid "locked by %{path_lock_user_name} %{created_at}"
-msgstr ""
+msgstr "被 %{path_lock_user_name} 于 %{created_at} 锁定"
msgid "merge request"
msgid_plural "merge requests"
-msgstr[0] ""
+msgstr[0] "合并请求"
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
-msgstr ""
+msgstr "请恢复此分支或使用其他的 %{missingBranchName} 分支"
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr "%{metricsLinkStart} 内存 %{metricsLinkEnd} 占用 %{emphasisStart} 下降 %{emphasisEnd},从 %{memoryFrom}MB 到 %{memoryTo}MB"
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr "%{metricsLinkStart} 内存 %{metricsLinkEnd} 占用 %{emphasisStart} 上升 %{emphasisEnd},从 %{memoryFrom}MB 到 %{memoryTo}MB"
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr "%{metricsLinkStart} 内存 %{metricsLinkEnd} 占用 %{emphasisStart} 无变化 %{emphasisEnd}, 保持在 %{memoryFrom}MB"
msgid "mrWidget|Add approval"
-msgstr ""
+msgstr "增加批准"
+
+msgid "mrWidget|Allows edits from maintainers"
+msgstr "允许上游项目维护人员进行编辑。"
msgid "mrWidget|An error occured while removing your approval."
-msgstr ""
+msgstr "删除批准时发生错误。"
msgid "mrWidget|An error occured while retrieving approval data for this merge request."
-msgstr ""
+msgstr "读取此合并请求的批准数据时发生错误。"
msgid "mrWidget|An error occured while submitting your approval."
-msgstr ""
+msgstr "提交批准时发生错误。"
msgid "mrWidget|Approve"
+msgstr "批准"
+
+msgid "mrWidget|Approved"
msgstr ""
msgid "mrWidget|Approved by"
-msgstr ""
+msgstr "批准人:"
msgid "mrWidget|Cancel automatic merge"
-msgstr ""
+msgstr "取消自动合并"
msgid "mrWidget|Check out branch"
-msgstr ""
+msgstr "检出分支"
msgid "mrWidget|Checking ability to merge automatically"
-msgstr ""
+msgstr "检查是否可以自动合并"
msgid "mrWidget|Cherry-pick"
-msgstr ""
+msgstr "优选"
msgid "mrWidget|Cherry-pick this merge request in a new merge request"
-msgstr ""
+msgstr "通过新的合并请求中优选此合并请求"
msgid "mrWidget|Closed"
-msgstr ""
+msgstr "已关闭"
msgid "mrWidget|Closed by"
-msgstr ""
+msgstr "关闭:"
msgid "mrWidget|Closes"
-msgstr ""
+msgstr "关闭"
+
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr "部署统计信息当前不可用"
msgid "mrWidget|Did not close"
-msgstr ""
+msgstr "没有关闭"
msgid "mrWidget|Email patches"
-msgstr ""
+msgstr "通过电子邮件发出补丁"
+
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr "无法加载部署统计信息"
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
-msgstr ""
+msgstr "如果 %{branch} 分支存在于本地仓库中,则可以手动合并该合并请求。需使用"
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
-msgstr ""
+msgstr "如果 %{missingBranchName} 分支存在于本地仓库中,则可以通过以下命令行手动合并该合并请求。"
+
+msgid "mrWidget|Loading deployment statistics"
+msgstr "加载部署统计信息中"
msgid "mrWidget|Mentions"
-msgstr ""
+msgstr "提及"
msgid "mrWidget|Merge"
-msgstr ""
+msgstr "合并"
msgid "mrWidget|Merge failed."
-msgstr ""
+msgstr "合并失败。"
msgid "mrWidget|Merge locally"
-msgstr ""
+msgstr "本地合并"
msgid "mrWidget|Merged by"
-msgstr ""
+msgstr "合并:"
msgid "mrWidget|Plain diff"
-msgstr ""
+msgstr "文本差异"
msgid "mrWidget|Refresh"
-msgstr ""
+msgstr "刷新"
msgid "mrWidget|Refresh now"
-msgstr ""
+msgstr "立即刷新"
msgid "mrWidget|Refreshing now"
-msgstr ""
+msgstr "立即刷新"
msgid "mrWidget|Remove Source Branch"
-msgstr ""
+msgstr "删除源分支"
msgid "mrWidget|Remove source branch"
-msgstr ""
+msgstr "删除源分支"
msgid "mrWidget|Remove your approval"
-msgstr ""
+msgstr "删除您的批准"
msgid "mrWidget|Request to merge"
-msgstr ""
+msgstr "请求合并"
msgid "mrWidget|Resolve conflicts"
-msgstr ""
+msgstr "解决冲突"
msgid "mrWidget|Revert"
-msgstr ""
+msgstr "还原"
msgid "mrWidget|Revert this merge request in a new merge request"
-msgstr ""
+msgstr "通过新的合并请求中还原此合并请求"
msgid "mrWidget|Set by"
-msgstr ""
+msgstr "设置:"
msgid "mrWidget|The changes were merged into"
-msgstr ""
+msgstr "更改已合并到"
msgid "mrWidget|The changes were not merged into"
-msgstr ""
+msgstr "更改未合并到"
msgid "mrWidget|The changes will be merged into"
-msgstr ""
+msgstr "更改将被合并到"
msgid "mrWidget|The source branch has been removed"
-msgstr ""
+msgstr "源分支已被删除"
msgid "mrWidget|The source branch is being removed"
-msgstr ""
+msgstr "源分支正在被删除"
msgid "mrWidget|The source branch will be removed"
-msgstr ""
+msgstr "源分支将被删除"
msgid "mrWidget|The source branch will not be removed"
-msgstr ""
+msgstr "源分支不会被删除"
msgid "mrWidget|There are merge conflicts"
-msgstr ""
+msgstr "存在合并冲突"
msgid "mrWidget|This merge request failed to be merged automatically"
-msgstr ""
+msgstr "该合并请求未能自动合并"
msgid "mrWidget|This merge request is in the process of being merged"
-msgstr ""
+msgstr "该合并请求正在被合并"
msgid "mrWidget|This project is archived, write access has been disabled"
+msgstr "该项目已存档,禁止写入"
+
+msgid "mrWidget|Web IDE"
msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
-msgstr ""
+msgstr "可以手动合并此合并请求,使用以下"
msgid "mrWidget|You can remove source branch now"
-msgstr ""
+msgstr "当前已可以删除源分支"
msgid "mrWidget|branch does not exist."
-msgstr ""
+msgstr "分支不存在"
msgid "mrWidget|command line"
-msgstr ""
+msgstr "命令行"
msgid "mrWidget|into"
-msgstr ""
+msgstr "入"
msgid "mrWidget|to be merged automatically when the pipeline succeeds"
-msgstr ""
+msgstr "流水线成功时自动合并"
msgid "new merge request"
msgstr "新建合并请求"
@@ -4290,7 +5216,7 @@ msgid "notification emails"
msgstr "通知邮件"
msgid "or"
-msgstr ""
+msgstr "或"
msgid "parent"
msgid_plural "parents"
@@ -4302,14 +5228,20 @@ msgstr "密码"
msgid "personal access token"
msgstr "个人访问令牌"
+msgid "private key does not match certificate."
+msgstr "私钥与证书不匹配。"
+
msgid "remove due date"
-msgstr ""
+msgstr "删除截止日期"
msgid "source"
msgstr "源"
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
-msgstr ""
+msgstr "%{slash_command} 将会更新消耗的总时长。"
+
+msgid "this document"
+msgstr "此文档"
msgid "to help your contributors communicate effectively!"
msgstr "帮助您的贡献者进行有效沟通!"
@@ -4318,8 +5250,8 @@ msgid "username"
msgstr "用户名"
msgid "uses Kubernetes clusters to deploy your code!"
-msgstr ""
+msgstr "使用 Kubernetes 集群来部署代码!"
msgid "with %{additions} additions, %{deletions} deletions."
-msgstr ""
+msgstr "共 %{additions} 条新增, %{deletions} 条删除."
diff --git a/locale/zh_HK/gitlab.po b/locale/zh_HK/gitlab.po
index 0174e945bab..6bfcae6aa91 100644
--- a/locale/zh_HK/gitlab.po
+++ b/locale/zh_HK/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:22-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:39-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Chinese Traditional, Hong Kong\n"
"Language: zh_HK\n"
@@ -27,6 +27,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] ""
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -39,6 +43,10 @@ msgid "%d merge request"
msgid_plural "%d merge requests"
msgstr[0] ""
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
msgstr[0] "為提高頁面加載速度及性能,已省略了 %s 次提交。"
@@ -53,6 +61,9 @@ msgid "%{count} participant"
msgid_plural "%{count} participants"
msgstr[0] ""
+msgid "%{loadingIcon} Started"
+msgstr ""
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
@@ -94,15 +105,30 @@ msgstr ""
msgid "2FA enabled"
msgstr ""
+msgid "Removes source branch"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "相關持續集成的圖像集合"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
msgid "About auto deploy"
msgstr "關於自動部署"
msgid "Abuse Reports"
msgstr ""
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr ""
@@ -112,6 +138,9 @@ msgstr "因恢復安裝,訪問故障存儲已被暫時禁用。在問題解決
msgid "Account"
msgstr ""
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "啟用"
@@ -208,9 +237,33 @@ msgstr "全部"
msgid "All changes are committed"
msgstr ""
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "Allow edits from maintainers."
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
msgid "An error occurred previewing the blob"
msgstr ""
@@ -289,6 +342,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "Any Label"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -322,6 +378,9 @@ msgstr "確定嗎?"
msgid "Artifacts"
msgstr ""
+msgid "Assertion consumer service URL"
+msgstr ""
+
msgid "Assign custom color like #FF0000"
msgstr ""
@@ -334,6 +393,15 @@ msgstr ""
msgid "Assign to"
msgstr ""
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
+msgstr ""
+
msgid "Assignee"
msgstr ""
@@ -358,6 +426,9 @@ msgstr ""
msgid "Auto DevOps enabled"
msgstr ""
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
msgstr ""
@@ -400,6 +471,12 @@ msgstr ""
msgid "Average per day: %{average}"
msgstr ""
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
msgid "Begin with the selected commit"
msgstr ""
@@ -482,6 +559,15 @@ msgstr "切換分支"
msgid "Branches"
msgstr "分支"
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr ""
@@ -527,12 +613,39 @@ msgstr ""
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr ""
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
msgstr ""
msgid "Branches|Sort by"
msgstr ""
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -578,30 +691,45 @@ msgstr "瀏覽文件"
msgid "Browse files"
msgstr "瀏覽文件"
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr "作者:"
msgid "CI / CD"
msgstr ""
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
msgstr ""
+msgid "CI/CD for external repo"
+msgstr ""
+
msgid "CICD|Jobs"
msgstr ""
msgid "Cancel"
msgstr "取消"
-msgid "Cancel edit"
-msgstr "取消编辑"
+msgid "Cannot be merged automatically"
+msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "挑選到分支"
@@ -656,6 +784,12 @@ msgstr ""
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -758,6 +892,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr ""
@@ -857,6 +1000,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr ""
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -866,6 +1012,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr ""
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr ""
@@ -884,6 +1033,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -917,6 +1069,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -977,6 +1132,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1004,6 +1162,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1126,6 +1287,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1141,9 +1308,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr ""
@@ -1189,6 +1392,12 @@ msgstr ""
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr ""
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr "貢獻指南"
@@ -1252,8 +1461,8 @@ msgstr ""
msgid "Create directory"
msgstr "創建目錄"
-msgid "Create empty bare repository"
-msgstr "創建空的存儲庫"
+msgid "Create empty repository"
+msgstr ""
msgid "Create epic"
msgstr ""
@@ -1261,6 +1470,9 @@ msgstr ""
msgid "Create file"
msgstr ""
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1285,6 +1497,9 @@ msgstr ""
msgid "Create new..."
msgstr "創建..."
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr "派生"
@@ -1318,6 +1533,9 @@ msgstr "自定義通知事件"
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "自定義通知級別繼承自參與級別。使用自定義通知級別,您會收到參與級別及選定事件的通知。想了解更多信息,請查看 %{notification_link}."
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr "週期分析"
@@ -1400,9 +1618,15 @@ msgstr ""
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr "不再顯示"
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr "下載"
@@ -1430,9 +1654,15 @@ msgstr "差異文件"
msgid "DownloadSource|Download"
msgstr "下載"
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr "編輯"
@@ -1442,6 +1672,18 @@ msgstr "編輯 %{id} 流水線計劃"
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr ""
@@ -1451,6 +1693,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1511,6 +1780,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1586,9 +1858,15 @@ msgstr ""
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1598,6 +1876,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1631,6 +1912,9 @@ msgstr "文件"
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr "按提交消息過濾"
@@ -1640,12 +1924,21 @@ msgstr "按路徑查找"
msgid "Find file"
msgstr "查找文件"
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr "首次推送"
msgid "FirstPushedBy|pushed by"
msgstr "推送者:"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] "派生"
@@ -1656,9 +1949,15 @@ msgstr "派生自"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr ""
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr ""
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr "從創建議題到部署到生產環境"
@@ -1677,12 +1976,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1728,21 +2033,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1755,9 +2087,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1788,6 +2132,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1797,12 +2144,30 @@ msgstr "Git 存儲健康信息已重置"
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr "GitLab Runner 介紹"
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr "跳轉到派生項目"
@@ -1869,9 +2234,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr ""
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr ""
@@ -1902,6 +2264,9 @@ msgstr ""
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr "健康檢查 (Health Check)"
@@ -1920,6 +2285,15 @@ msgstr "沒有檢測到健康問題"
msgid "HealthCheck|Unhealthy"
msgstr "不良"
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1930,12 +2304,39 @@ msgstr ""
msgid "Housekeeping successfully started"
msgstr "已開始維護"
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr "導入存儲庫"
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -1958,6 +2359,9 @@ msgstr[0] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2012,6 +2416,9 @@ msgstr ""
msgid "June"
msgstr ""
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2042,12 +2449,30 @@ msgstr "停用"
msgid "LFSStatus|Enabled"
msgstr "啟用"
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr ""
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "最近 %d 天"
@@ -2106,6 +2531,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2118,9 +2546,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr ""
@@ -2136,9 +2561,21 @@ msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr ""
@@ -2160,6 +2597,9 @@ msgstr "中位數"
msgid "Members"
msgstr ""
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr ""
@@ -2172,15 +2612,87 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr ""
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2196,6 +2708,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "添加壹個 SSH 公鑰"
@@ -2208,6 +2729,9 @@ msgstr ""
msgid "Monitoring"
msgstr ""
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2281,6 +2805,9 @@ msgstr ""
msgid "New tag"
msgstr "新增標籤"
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2299,6 +2826,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr "沒有存儲庫"
@@ -2314,6 +2844,12 @@ msgstr ""
msgid "Not available"
msgstr "不可用"
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2323,6 +2859,18 @@ msgstr "數據不足"
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr "通知事件"
@@ -2407,6 +2955,12 @@ msgstr ""
msgid "OfSearchInADropdown|Filter"
msgstr "篩選"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr ""
@@ -2428,12 +2982,18 @@ msgstr "操作"
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Owner"
msgstr "所有者"
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr ""
@@ -2446,9 +3006,21 @@ msgstr ""
msgid "Pagination|« First"
msgstr ""
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr ""
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr "流水線"
@@ -2530,9 +3102,36 @@ msgstr ""
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2563,6 +3162,9 @@ msgstr "於階段"
msgid "Pipeline|with stages"
msgstr "於階段"
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2572,6 +3174,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -2626,6 +3234,9 @@ msgstr ""
msgid "Profiles|your account"
msgstr ""
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2650,9 +3261,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr "專案詳情"
@@ -2749,6 +3357,12 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
"
+msgstr ""
+
msgid "PrometheusService|Active"
msgstr ""
@@ -2761,9 +3375,21 @@ msgstr ""
msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server."
msgstr ""
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
msgid "PrometheusService|Finding and configuring metrics..."
msgstr ""
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
msgid "PrometheusService|Install Prometheus on clusters"
msgstr ""
@@ -2776,19 +3402,13 @@ msgstr ""
msgid "PrometheusService|Metrics"
msgstr ""
-msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters."
-msgstr ""
-
msgid "PrometheusService|Missing environment variable"
msgstr ""
-msgid "PrometheusService|Monitored"
-msgstr ""
-
msgid "PrometheusService|More information"
msgstr ""
-msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment."
+msgid "PrometheusService|New metric"
msgstr ""
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
@@ -2797,6 +3417,9 @@ msgstr ""
msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
msgstr ""
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
msgid "PrometheusService|Time-series monitoring service"
msgstr ""
@@ -2806,7 +3429,16 @@ msgstr ""
msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
msgstr ""
-msgid "PrometheusService|View environments"
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote to Group Label"
+msgstr ""
+
+msgid "Promote to Group Milestone"
msgstr ""
msgid "Protip:"
@@ -2842,6 +3474,9 @@ msgstr "了解更多"
msgid "Readme"
msgstr "自述文件"
+msgid "Real-time features"
+msgstr ""
+
msgid "RefSwitcher|Branches"
msgstr "分支"
@@ -2875,6 +3510,9 @@ msgstr "相關的合併請求"
msgid "Related Merged Requests"
msgstr "相關已合併的合併請求"
+msgid "Related merge requests"
+msgstr ""
+
msgid "Remind later"
msgstr "稍後提醒"
@@ -2890,12 +3528,24 @@ msgstr "刪除項目"
msgid "Repair authentication"
msgstr ""
+msgid "Repo by URL"
+msgstr ""
+
msgid "Repository"
msgstr "存儲庫"
msgid "Repository has no locks."
msgstr ""
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror settings"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
msgid "Request Access"
msgstr "申請權限"
@@ -2911,6 +3561,9 @@ msgstr "重置 Runner 註冊令牌"
msgid "Resolve discussion"
msgstr ""
+msgid "Response"
+msgstr ""
+
msgid "Reveal value"
msgid_plural "Reveal values"
msgstr[0] ""
@@ -2921,9 +3574,36 @@ msgstr "還原此提交"
msgid "Revert this merge request"
msgstr "還原此合併請求"
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
msgid "Roadmap"
msgstr ""
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "SAML Single Sign On"
+msgstr ""
+
+msgid "SAML Single Sign On Settings"
+msgstr ""
+
+msgid "SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
msgid "SSH Keys"
msgstr ""
@@ -2939,6 +3619,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr "新建流水線計劃"
+msgid "Scheduled"
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -2948,6 +3631,9 @@ msgstr "流水線計劃"
msgid "Scoped issue boards"
msgstr ""
+msgid "Search"
+msgstr ""
+
msgid "Search branches and tags"
msgstr "搜索分支和標籤"
@@ -3011,15 +3697,33 @@ msgstr ""
msgid "Service URL"
msgstr ""
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "為賬號添加壹個用於推送或拉取的 %{protocol} 密碼。"
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
msgid "Set up Koding"
msgstr "設置 Koding"
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "設置密碼"
@@ -3029,6 +3733,9 @@ msgstr ""
msgid "Setup a specific Runner automatically"
msgstr ""
+msgid "Share the %{sso_label} with members so they can sign in to your group through your identity provider"
+msgstr ""
+
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr ""
@@ -3063,6 +3770,18 @@ msgstr ""
msgid "Sidebar|Weight"
msgstr ""
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
msgid "Snippets"
msgstr ""
@@ -3072,16 +3791,10 @@ msgstr ""
msgid "Something went wrong on our end."
msgstr ""
-msgid "Something went wrong trying to change the confidentiality of this issue"
-msgstr ""
-
-msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}"
-msgstr ""
-
msgid "Something went wrong when toggling the button"
msgstr ""
-msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgid "Something went wrong while fetching Dependency Scanning."
msgstr ""
msgid "Something went wrong while fetching SAST."
@@ -3093,12 +3806,6 @@ msgstr ""
msgid "Something went wrong while fetching the registry list."
msgstr ""
-msgid "Something went wrong while reopening the %{issuable}. Please try again later"
-msgstr ""
-
-msgid "Something went wrong while resolving this discussion. Please try again."
-msgstr ""
-
msgid "Something went wrong. Please try again."
msgstr ""
@@ -3216,12 +3923,21 @@ msgstr ""
msgid "Spam Logs"
msgstr ""
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
msgid "Specify the following URL during the Runner setup:"
msgstr "在 Runner 設置時指定以下 URL:"
msgid "StarProject|Star"
msgstr "星標"
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
msgid "Starred projects"
msgstr ""
@@ -3231,6 +3947,15 @@ msgstr "由此更改 %{new_merge_request}"
msgid "Start the Runner!"
msgstr "運作 Runner!"
+msgid "Started"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -3243,9 +3968,15 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "切換分支/標籤"
+msgid "System"
+msgstr ""
+
msgid "System Hooks"
msgstr ""
+msgid "System header and footer:"
+msgstr ""
+
msgid "Tag (%{tag_count})"
msgid_plural "Tags (%{tag_count})"
msgstr[0] ""
@@ -3325,6 +4056,9 @@ msgstr ""
msgid "Target Branch"
msgstr "目標分支"
+msgid "Target branch"
+msgstr ""
+
msgid "Team"
msgstr "團隊"
@@ -3340,15 +4074,24 @@ msgstr ""
msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
msgstr ""
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "編碼階段概述了從第壹次提交到創建合併請求的時間。創建第壹個合併請求後,數據將自動添加到此處。"
msgid "The collection of events added to the data gathered for that stage."
msgstr "與該階段相關的事件。"
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The fork relationship has been removed."
msgstr "派生關係已被刪除。"
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "議題階段概述了從創建議題到將議題添加到裏程碑或議題看板所花費的時間。創建第壹個議題後,數據將自動添加到此處.。"
@@ -3361,12 +4104,18 @@ msgstr ""
msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}."
msgstr ""
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
msgid "The phase of the development lifecycle."
msgstr "項目生命週期中的各個階段。"
msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
msgstr "計劃階段概述了從議題添加到日程到推送首次提交的時間。當首次推送提交後,數據將自動添加到此處。"
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr "生產階段概述了從創建議題到將代碼部署到生產環境的時間。當完成完整的想法到部署生產,數據將自動添加到此處。"
@@ -3382,6 +4131,9 @@ msgstr "此項目的存儲庫不存在。"
msgid "The repository for this project is empty"
msgstr ""
+msgid "The repository must be accessible over http://, https:// or git://."
+msgstr ""
+
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "評審階段概述了從創建合併請求到合併的時間。當創建第壹個合併請求後,數據將自動添加到此處。"
@@ -3418,6 +4170,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr "訪問 Git 存儲時出現問題:"
+msgid "There was an error loading results"
+msgstr ""
+
msgid "There was an error loading users activity calendar."
msgstr ""
@@ -3490,6 +4245,9 @@ msgstr ""
msgid "This repository"
msgstr ""
+msgid "This will delete the custom metric, Are you sure?"
+msgstr ""
+
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr ""
@@ -3502,6 +4260,12 @@ msgstr "開始進行編碼前的時間"
msgid "Time between merge request creation and merge/close"
msgstr "從創建合併請求到被合併或關閉的時間"
+msgid "Time between updates and capacity settings."
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -3657,6 +4421,36 @@ msgstr ""
msgid "Title"
msgstr ""
+msgid "To GitLab"
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose CI/CD for external repo."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
msgid "To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown."
msgstr ""
@@ -3696,18 +4490,12 @@ msgstr ""
msgid "Turn on Service Desk"
msgstr ""
-msgid "Unable to reset project cache."
-msgstr ""
-
msgid "Unknown"
msgstr ""
msgid "Unlock"
msgstr ""
-msgid "Unlock this %{issuableDisplayName}? Everyone will be able to comment."
-msgstr ""
-
msgid "Unlocked"
msgstr ""
@@ -3747,6 +4535,12 @@ msgstr ""
msgid "UploadLink|click to upload"
msgstr "點擊上傳"
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr ""
@@ -3756,24 +4550,51 @@ msgstr "在安裝過程中使用以下註冊令牌:"
msgid "Use your global notification setting"
msgstr "使用全局通知設置"
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr ""
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "View and edit lines"
+msgstr ""
+
msgid "View epics list"
msgstr ""
msgid "View file @ "
msgstr ""
+msgid "View group labels"
+msgstr ""
+
msgid "View labels"
msgstr ""
msgid "View open merge request"
msgstr "查看開啟的合並請求"
+msgid "View project labels"
+msgstr ""
+
msgid "View replaced file @ "
msgstr ""
+msgid "Visibility and access controls"
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "內部"
@@ -3801,12 +4622,18 @@ msgstr ""
msgid "Web IDE"
msgstr ""
+msgid "Web terminal"
+msgstr ""
+
msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
msgstr ""
msgid "Weight"
msgstr ""
+msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
+msgstr ""
+
msgid "Wiki"
msgstr ""
@@ -3927,14 +4754,20 @@ msgstr ""
msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "即將刪除 %{group_name}。已刪除的群組無法恢復!確定繼續嗎?"
-msgid "You are going to remove %{project_name_with_namespace}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr "即將要刪除 %{project_name_with_namespace}。已刪除的項目無法恢複!確定繼續嗎?"
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
msgstr "即將刪除與源項目 %{forked_from_project} 的派生關系。確定繼續嗎?"
-msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
-msgstr "即將 %{project_name_with_namespace} 轉義給另壹個所有者。確定繼續嗎?"
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
+msgstr ""
msgid "You can also create a project from the command line."
msgstr ""
@@ -4008,9 +4841,27 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr ""
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Todos"
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
msgstr ""
@@ -4026,6 +4877,13 @@ msgstr "您的名字"
msgid "Your projects"
msgstr ""
+msgid "among other things"
+msgstr ""
+
+msgid "and %d fixed vulnerability"
+msgid_plural "and %d fixed vulnerabilities"
+msgstr[0] ""
+
msgid "assign yourself"
msgstr ""
@@ -4035,12 +4893,30 @@ msgstr ""
msgid "by"
msgstr ""
+msgid "ciReport|%{type} detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{type} detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Code quality"
msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr ""
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
+msgstr ""
+
+msgid "ciReport|Dependency scanning detected no security vulnerabilities"
+msgstr ""
+
msgid "ciReport|Failed to load %{reportName} report"
msgstr ""
@@ -4068,9 +4944,6 @@ msgstr ""
msgid "ciReport|SAST"
msgstr ""
-msgid "ciReport|SAST degraded on"
-msgstr ""
-
msgid "ciReport|SAST detected"
msgstr ""
@@ -4083,40 +4956,66 @@ msgstr ""
msgid "ciReport|SAST:container no vulnerabilities were found"
msgstr ""
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
msgid "ciReport|Show complete code vulnerabilities report"
msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr ""
-msgid "ciReport|no security vulnerabilities"
+msgid "ciReport|no vulnerabilities"
msgstr ""
msgid "command line instructions"
msgstr ""
-msgid "commit"
+msgid "connecting"
msgstr ""
-msgid "confidentiality|You are going to turn off the confidentiality. This means everyone will be able to see and leave a comment on this issue."
-msgstr ""
-
-msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with at least Reporter access are able to see and leave comments on the issue."
+msgid "could not read private key, is the passphrase correct?"
msgstr ""
msgid "day"
msgid_plural "days"
msgstr[0] "天"
+msgid "detected %d fixed vulnerability"
+msgid_plural "detected %d fixed vulnerabilities"
+msgstr[0] ""
+
+msgid "detected %d new vulnerability"
+msgid_plural "detected %d new vulnerabilities"
+msgstr[0] ""
+
+msgid "detected no vulnerabilities"
+msgstr ""
+
msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
msgstr ""
+msgid "here"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in progress"
+msgstr ""
+
msgid "is invalid because there is downstream lock"
msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a valid X509 certificate."
+msgstr ""
+
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
@@ -4127,9 +5026,21 @@ msgstr[0] ""
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
msgid "mrWidget|Add approval"
msgstr ""
+msgid "mrWidget|Allows edits from maintainers"
+msgstr ""
+
msgid "mrWidget|An error occured while removing your approval."
msgstr ""
@@ -4142,6 +5053,9 @@ msgstr ""
msgid "mrWidget|Approve"
msgstr ""
+msgid "mrWidget|Approved"
+msgstr ""
+
msgid "mrWidget|Approved by"
msgstr ""
@@ -4169,18 +5083,27 @@ msgstr ""
msgid "mrWidget|Closes"
msgstr ""
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
msgid "mrWidget|Did not close"
msgstr ""
msgid "mrWidget|Email patches"
msgstr ""
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr ""
msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
msgstr ""
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
msgid "mrWidget|Mentions"
msgstr ""
@@ -4265,6 +5188,9 @@ msgstr ""
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|Web IDE"
+msgstr ""
+
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
@@ -4302,6 +5228,9 @@ msgstr ""
msgid "personal access token"
msgstr ""
+msgid "private key does not match certificate."
+msgstr ""
+
msgid "remove due date"
msgstr ""
@@ -4311,6 +5240,9 @@ msgstr ""
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr ""
+msgid "this document"
+msgstr ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
diff --git a/locale/zh_TW/gitlab.po b/locale/zh_TW/gitlab.po
index 025af6fa2d9..553050d06a1 100644
--- a/locale/zh_TW/gitlab.po
+++ b/locale/zh_TW/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-02 13:39+0100\n"
-"PO-Revision-Date: 2018-03-05 03:23-0500\n"
+"POT-Creation-Date: 2018-04-04 19:35+0200\n"
+"PO-Revision-Date: 2018-04-05 03:39-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Chinese Traditional\n"
"Language: zh_TW\n"
@@ -17,7 +17,7 @@ msgstr ""
"X-Crowdin-File: /master/locale/gitlab.pot\n"
msgid " and"
-msgstr ""
+msgstr " 和"
msgid "%d commit"
msgid_plural "%d commits"
@@ -25,11 +25,15 @@ msgstr[0] "%d 個更動 (commit)"
msgid "%d commit behind"
msgid_plural "%d commits behind"
-msgstr[0] ""
+msgstr[0] "落後 %d 個更動紀錄"
+
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] "%d 導出"
msgid "%d issue"
msgid_plural "%d issues"
-msgstr[0] ""
+msgstr[0] "%d 個議題"
msgid "%d layer"
msgid_plural "%d layers"
@@ -37,7 +41,11 @@ msgstr[0] "%d 個圖層"
msgid "%d merge request"
msgid_plural "%d merge requests"
-msgstr[0] ""
+msgstr[0] "%d 個合併請求"
+
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] "%d 指標"
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
@@ -47,14 +55,17 @@ msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
-msgstr ""
+msgstr "由 %{commit_author_link} 提交於 %{commit_timeago}"
msgid "%{count} participant"
msgid_plural "%{count} participants"
msgstr[0] "%{count} 參與者"
+msgid "%{loadingIcon} Started"
+msgstr "%{loadingIcon} 開始"
+
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
-msgstr ""
+msgstr "%{lock_path} 被使用者 %{lock_user_id} 鎖定"
msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
msgstr ""
@@ -66,14 +77,14 @@ msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not re
msgstr "已失敗 %{number_of_failures} / %{maximum_failures} 次,GitLab 將不再自動重試。請在確認問題解決後手動重置儲存空間資訊。"
msgid "%{openOrClose} %{noteable}"
-msgstr ""
+msgstr "%{openOrClose} %{noteable}"
msgid "%{storage_name}: failed storage access attempt on host:"
msgid_plural "%{storage_name}: %{failed_attempts} failed storage access attempts:"
msgstr[0] "%{storage_name}:已存取此主機失敗 %{failed_attempts} 次"
msgid "%{text} is available"
-msgstr ""
+msgstr "%{text} 可用"
msgid "(checkout the %{link} for information on how to install it)."
msgstr "(如何安裝請參閱 %{link})"
@@ -94,15 +105,30 @@ msgstr "第一次協作"
msgid "2FA enabled"
msgstr "已啟用雙重認證"
+msgid "Removes source branch"
+msgstr "刪除來源分支"
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "持續整合 (CI) 相關的圖表"
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr "將會再創建一個新的分支,並建立一個新的合併請求。"
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr "一個專案提供了以下功能,存放你的文件(存儲庫),計劃你的工作(議題),並發布你的文件(維基), %{among_other_things_link}。"
+
+msgid "A user with write access to the source branch selected this option"
+msgstr "一個有存取原始分支權限的使用者,選擇了此項目"
+
msgid "About auto deploy"
msgstr "關於自動部署"
msgid "Abuse Reports"
msgstr "濫用報告"
+msgid "Abuse reports"
+msgstr ""
+
msgid "Access Tokens"
msgstr "存取憑證 (access token)"
@@ -112,6 +138,9 @@ msgstr "已暫時停用失敗的 Git 儲存空間。當儲存空間恢復正常
msgid "Account"
msgstr "帳號"
+msgid "Account and limit settings"
+msgstr ""
+
msgid "Active"
msgstr "啟用"
@@ -119,7 +148,7 @@ msgid "Activity"
msgstr "活動"
msgid "Add"
-msgstr ""
+msgstr "增加"
msgid "Add Changelog"
msgstr "新增更新日誌"
@@ -128,76 +157,76 @@ msgid "Add Contribution guide"
msgstr "新增協作指南"
msgid "Add Group Webhooks and GitLab Enterprise Edition."
-msgstr ""
+msgstr "啟用群組 Webhooks 及 GitLab 企業版。"
msgid "Add Kubernetes cluster"
-msgstr ""
+msgstr "增加 Kubernetes 叢集"
msgid "Add License"
msgstr "新增授權條款"
msgid "Add Readme"
-msgstr ""
+msgstr "增加說明檔案"
msgid "Add new directory"
msgstr "新增目錄"
msgid "Add todo"
-msgstr ""
+msgstr "增加待辦事項"
msgid "AdminArea|Stop all jobs"
-msgstr ""
+msgstr "停止所有任務"
msgid "AdminArea|Stop all jobs?"
-msgstr ""
+msgstr "要停止所有任務嗎?"
msgid "AdminArea|Stop jobs"
-msgstr ""
+msgstr "停止任務"
msgid "AdminArea|Stopping jobs failed"
-msgstr ""
+msgstr "停止任務失敗"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
-msgstr ""
+msgstr "您將停止所有任務,這將會暫停所有正在運行的任務。"
msgid "AdminHealthPageLink|health page"
msgstr "系統狀態"
msgid "AdminProjects|Delete"
-msgstr ""
+msgstr "刪除"
msgid "AdminProjects|Delete Project %{projectName}?"
-msgstr ""
+msgstr "刪除專案 %{projectName} ?"
msgid "AdminProjects|Delete project"
-msgstr ""
+msgstr "刪除專案"
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
msgstr ""
msgid "AdminUsers|Block user"
-msgstr ""
+msgstr "封鎖使用者"
msgid "AdminUsers|Delete User %{username} and contributions?"
-msgstr ""
+msgstr "刪除使用者 %{username} 及其貢獻?"
msgid "AdminUsers|Delete User %{username}?"
-msgstr ""
+msgstr "刪除使用者 %{username} ?"
msgid "AdminUsers|Delete user"
-msgstr ""
+msgstr "刪除使用者"
msgid "AdminUsers|Delete user and contributions"
-msgstr ""
+msgstr "刪除使用者及其貢獻"
msgid "AdminUsers|To confirm, type %{projectName}"
-msgstr ""
+msgstr "請輸入 %{projectName} 以進行確認"
msgid "AdminUsers|To confirm, type %{username}"
-msgstr ""
+msgstr "請輸入 %{username} 以進行確認"
msgid "Advanced"
-msgstr ""
+msgstr "進階設置"
msgid "Advanced settings"
msgstr "進階設定"
@@ -206,16 +235,40 @@ msgid "All"
msgstr "全部"
msgid "All changes are committed"
+msgstr "所有改變都已經提交"
+
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr "從模板建立或導入專案時將啟用所有功能,您可以在專案設置中將其關閉。"
+
+msgid "Allow edits from maintainers."
+msgstr "允許維護人員編輯。"
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
msgstr ""
msgid "Allows you to add and manage Kubernetes clusters."
+msgstr "允許您增加和管理Kubernetes叢集。"
+
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr "或者,你可以使用 %{personal_access_token_link}。當你建立你的個人存取權杖時,你將需要選擇檔案庫範圍,所以我們將會顯示你公開及私人的檔案庫清單進行連結。"
+
+msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the repo scope, so we can display a list of your public and private repositories which are available to import."
msgstr ""
msgid "An error occurred previewing the blob"
-msgstr ""
+msgstr "預覽 blob 檔案時發生錯誤"
msgid "An error occurred when toggling the notification subscription"
-msgstr ""
+msgstr "切換訂閱通知時發生錯誤"
msgid "An error occurred when updating the issue weight"
msgstr ""
@@ -227,7 +280,7 @@ msgid "An error occurred while detecting host keys"
msgstr ""
msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again."
-msgstr ""
+msgstr "解除亮高顯示時發生錯誤,請重新整理頁面再次嘗試。"
msgid "An error occurred while fetching markdown preview"
msgstr ""
@@ -281,7 +334,7 @@ msgid "An error occurred while saving LDAP override status. Please try again."
msgstr ""
msgid "An error occurred while saving assignees"
-msgstr ""
+msgstr "儲存被指派人時發生錯誤"
msgid "An error occurred while validating username"
msgstr ""
@@ -289,6 +342,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr "發生錯誤,請再試一次。"
+msgid "Any Label"
+msgstr "任意標籤"
+
msgid "Appearance"
msgstr "外觀"
@@ -296,10 +352,10 @@ msgid "Applications"
msgstr "應用程式"
msgid "Apr"
-msgstr ""
+msgstr "四月"
msgid "April"
-msgstr ""
+msgstr "四月"
msgid "Archived project! Repository is read-only"
msgstr "此專案已封存!檔案庫 (repository) 為唯讀狀態"
@@ -320,31 +376,43 @@ msgid "Are you sure?"
msgstr "確定嗎?"
msgid "Artifacts"
+msgstr "產物"
+
+msgid "Assertion consumer service URL"
msgstr ""
msgid "Assign custom color like #FF0000"
-msgstr ""
+msgstr "自定義顏色,例如 #FF0000"
msgid "Assign labels"
-msgstr ""
+msgstr "指派標籤"
msgid "Assign milestone"
-msgstr ""
+msgstr "指派里程碑"
msgid "Assign to"
+msgstr "指派給"
+
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to :name"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgstr "指派人"
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "拖放檔案到此處或者 %{upload_link}"
msgid "Aug"
-msgstr ""
+msgstr "八月"
msgid "August"
-msgstr ""
+msgstr "八月"
msgid "Authentication Log"
msgstr "登入紀錄"
@@ -353,9 +421,12 @@ msgid "Author"
msgstr "作者"
msgid "Authors: %{authors}"
-msgstr ""
+msgstr "作者:%{authors}"
msgid "Auto DevOps enabled"
+msgstr "啟動自動 DevOps"
+
+msgid "Auto DevOps, runners and job artifacts"
msgstr ""
msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly."
@@ -389,22 +460,28 @@ msgid "AutoDevOps|add a Kubernetes cluster"
msgstr ""
msgid "AutoDevOps|enable Auto DevOps (Beta)"
-msgstr ""
+msgstr "啟用自動 DevOps (測試版)"
msgid "Available"
-msgstr ""
+msgstr "能運做的"
msgid "Avatar will be removed. Are you sure?"
-msgstr ""
+msgstr "大頭貼將被刪除。你確定嗎?"
msgid "Average per day: %{average}"
+msgstr "平均每天:%{average}"
+
+msgid "Background Color"
+msgstr ""
+
+msgid "Background jobs"
msgstr ""
msgid "Begin with the selected commit"
-msgstr ""
+msgstr "從選定的變更紀錄開始"
msgid "Billing"
-msgstr ""
+msgstr "帳單"
msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
msgstr ""
@@ -482,6 +559,15 @@ msgstr "切換分支 (branch)"
msgid "Branches"
msgstr "分支 (branch) "
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr "全部"
+
msgid "Branches|Cant find HEAD commit for this branch"
msgstr "找不到此分支的 HEAD 更動。"
@@ -527,12 +613,39 @@ msgstr "一旦你確認並按下 %{delete_protected_branch} 之後,此動作
msgid "Branches|Only a project master or owner can delete a protected branch"
msgstr "只有專案管理者或擁有者才能刪除被保護的分支。"
-msgid "Branches|Protected branches can be managed in %{project_settings_link}"
-msgstr "在 %{project_settings_link} 管理受保護的分支"
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
+msgstr ""
msgid "Branches|Sort by"
msgstr "排序自"
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
msgstr ""
@@ -578,13 +691,22 @@ msgstr "瀏覽檔案"
msgid "Browse files"
msgstr "瀏覽檔案"
+msgid "Business"
+msgstr ""
+
msgid "ByAuthor|by"
msgstr "作者:"
msgid "CI / CD"
msgstr "CI / CD"
+msgid "CI/CD"
+msgstr ""
+
msgid "CI/CD configuration"
+msgstr "CI/CD 設定"
+
+msgid "CI/CD for external repo"
msgstr ""
msgid "CICD|Jobs"
@@ -593,15 +715,21 @@ msgstr "作業"
msgid "Cancel"
msgstr "取消"
-msgid "Cancel edit"
-msgstr "取消編輯"
+msgid "Cannot be merged automatically"
+msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
+msgid "Certificate fingerprint"
+msgstr ""
+
msgid "Change Weight"
msgstr ""
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "挑選到分支 (branch) "
@@ -645,17 +773,23 @@ msgid "Cherry-pick this merge request"
msgstr "挑選此合併請求 (merge request) "
msgid "Choose File ..."
-msgstr ""
+msgstr "選擇檔案⋯"
msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request."
msgstr ""
msgid "Choose file..."
-msgstr ""
+msgstr "選擇檔案⋯"
msgid "Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which repositories you want to import."
+msgstr ""
+
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
@@ -758,6 +892,15 @@ msgstr ""
msgid "Click to expand text"
msgstr ""
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
msgid "Clone repository"
msgstr "複製(clone)檔案庫(repository)"
@@ -857,6 +1000,9 @@ msgstr ""
msgid "ClusterIntegration|Helm Tiller"
msgstr ""
+msgid "ClusterIntegration|In order to show the health of the cluster, we'll need to provision your cluster with Prometheus to collect the required data."
+msgstr ""
+
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -866,6 +1012,9 @@ msgstr ""
msgid "ClusterIntegration|Install"
msgstr ""
+msgid "ClusterIntegration|Install Prometheus"
+msgstr ""
+
msgid "ClusterIntegration|Installed"
msgstr ""
@@ -884,6 +1033,9 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster details"
msgstr ""
+msgid "ClusterIntegration|Kubernetes cluster health"
+msgstr ""
+
msgid "ClusterIntegration|Kubernetes cluster integration"
msgstr ""
@@ -917,6 +1069,9 @@ msgstr "學習更多有關於%{link_to_documentation}"
msgid "ClusterIntegration|Learn more about environments"
msgstr ""
+msgid "ClusterIntegration|Learn more about security configuration"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "機器型別"
@@ -977,6 +1132,9 @@ msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Security"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
@@ -1004,6 +1162,9 @@ msgstr ""
msgid "ClusterIntegration|Something went wrong while installing %{title}"
msgstr ""
+msgid "ClusterIntegration|The default cluster configuration grants access to a wide set of functionalities needed to successfully build and deploy a containerised application."
+msgstr ""
+
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr ""
@@ -1126,6 +1287,12 @@ msgstr ""
msgid "Compare Revisions"
msgstr ""
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr ""
@@ -1141,9 +1308,45 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Confidential"
+msgstr ""
+
msgid "Confidentiality"
msgstr ""
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Sidekiq job throttling."
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure storage path and circuit breaker settings."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
msgid "Container Registry"
msgstr "Container Registry"
@@ -1189,6 +1392,12 @@ msgstr "使用不同的映像檔名稱"
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
msgstr "將 Docker Container Registry 整合到 GitLab 中後,每個專案都可以有自己的空間來儲存 Docker 的映像檔"
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
msgid "Contribution guide"
msgstr "協作指南"
@@ -1252,8 +1461,8 @@ msgstr ""
msgid "Create directory"
msgstr "建立目錄"
-msgid "Create empty bare repository"
-msgstr "建立一個新的 bare repository"
+msgid "Create empty repository"
+msgstr ""
msgid "Create epic"
msgstr ""
@@ -1261,6 +1470,9 @@ msgstr ""
msgid "Create file"
msgstr "新增檔案"
+msgid "Create group label"
+msgstr ""
+
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -1285,6 +1497,9 @@ msgstr ""
msgid "Create new..."
msgstr "建立..."
+msgid "Create project label"
+msgstr ""
+
msgid "CreateNewFork|Fork"
msgstr "分支 (fork) "
@@ -1318,6 +1533,9 @@ msgstr "自訂事件通知"
msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
msgstr "自訂通知的等級與參與度設定相同。使用自訂通知讓你只收到特定的事件通知。想了解更多資訊,請查閱 %{notification_link} 。"
+msgid "Customize colors"
+msgstr ""
+
msgid "Cycle Analytics"
msgstr "週期分析"
@@ -1400,9 +1618,15 @@ msgstr "關閉循環分析介紹視窗"
msgid "Dismiss Merge Request promotion"
msgstr ""
+msgid "Documentation for popular identity providers"
+msgstr ""
+
msgid "Don't show again"
msgstr "不再顯示"
+msgid "Done"
+msgstr ""
+
msgid "Download"
msgstr "下載"
@@ -1430,9 +1654,15 @@ msgstr "差異檔 (diff)"
msgid "DownloadSource|Download"
msgstr "下載原始碼"
+msgid "Downvotes"
+msgstr ""
+
msgid "Due date"
msgstr ""
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
msgid "Edit"
msgstr "編輯"
@@ -1442,6 +1672,18 @@ msgstr "編輯 %{id} 流水線 (pipeline) 排程"
msgid "Edit files in the editor and commit changes here"
msgstr ""
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch intergration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
msgid "Emails"
msgstr "電子郵件"
@@ -1451,6 +1693,33 @@ msgstr ""
msgid "Enable Auto DevOps"
msgstr ""
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable Sentry for error reporting and logging."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgstr ""
+
+msgid "Enable the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
@@ -1511,6 +1780,9 @@ msgstr ""
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
+msgid "Error Reporting and Logging"
+msgstr ""
+
msgid "Error checking branch data. Please try again."
msgstr ""
@@ -1586,9 +1858,15 @@ msgstr "搜尋公開的群組"
msgid "External Classification Policy Authorization"
msgstr ""
+msgid "External authentication"
+msgstr ""
+
msgid "External authorization denied access to this project"
msgstr ""
+msgid "External authorization request timeout"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification Label"
msgstr ""
@@ -1598,6 +1876,9 @@ msgstr ""
msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
msgstr ""
+msgid "Failed"
+msgstr ""
+
msgid "Failed Jobs"
msgstr ""
@@ -1631,6 +1912,9 @@ msgstr "檔案"
msgid "Files (%{human_size})"
msgstr ""
+msgid "Fill in the fields below, turn on %{enable_label}, and press %{save_changes}"
+msgstr ""
+
msgid "Filter by commit message"
msgstr "以更動說明篩選"
@@ -1640,12 +1924,21 @@ msgstr "以路徑搜尋"
msgid "Find file"
msgstr "搜尋檔案"
+msgid "Finished"
+msgstr ""
+
msgid "FirstPushedBy|First"
msgstr "首次推送 (push) "
msgid "FirstPushedBy|pushed by"
msgstr "推送者 (push) :"
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
msgid "Fork"
msgid_plural "Forks"
msgstr[0] "分支 (fork) "
@@ -1656,9 +1949,15 @@ msgstr "分支 (fork) 自"
msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
msgstr "從 %{project_name} Fork. (deleted)"
+msgid "Forking in progress"
+msgstr ""
+
msgid "Format"
msgstr "格式"
+msgid "From %{provider_title}"
+msgstr ""
+
msgid "From issue creation until deploy to production"
msgstr "從議題 (issue) 建立直到部署至營運環境"
@@ -1677,12 +1976,18 @@ msgstr ""
msgid "Geo Nodes"
msgstr ""
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
msgstr ""
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
msgid "GeoNodes|Database replication lag:"
msgstr ""
@@ -1728,21 +2033,48 @@ msgstr ""
msgid "GeoNodes|New node"
msgstr ""
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
msgid "GeoNodes|Out of sync"
msgstr ""
+msgid "GeoNodes|Removing a node stops the sync process. Are you sure?"
+msgstr ""
+
msgid "GeoNodes|Replication slot WAL:"
msgstr ""
msgid "GeoNodes|Replication slots:"
msgstr ""
+msgid "GeoNodes|Repositories checksummed:"
+msgstr ""
+
msgid "GeoNodes|Repositories:"
msgstr ""
+msgid "GeoNodes|Repository checksums verified:"
+msgstr ""
+
msgid "GeoNodes|Selective"
msgstr ""
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
msgid "GeoNodes|Storage config:"
msgstr ""
@@ -1755,9 +2087,21 @@ msgstr ""
msgid "GeoNodes|Unused slots"
msgstr ""
+msgid "GeoNodes|Unverified"
+msgstr ""
+
msgid "GeoNodes|Used slots"
msgstr ""
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksums verified:"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed:"
+msgstr ""
+
msgid "GeoNodes|Wikis:"
msgstr ""
@@ -1788,6 +2132,9 @@ msgstr ""
msgid "Geo|Shards to synchronize"
msgstr ""
+msgid "Git repository URL"
+msgstr ""
+
msgid "Git revision"
msgstr ""
@@ -1797,12 +2144,30 @@ msgstr "Git 儲存空間健康指數已重置"
msgid "Git version"
msgstr ""
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
msgid "GitLab Runner section"
msgstr "GitLab Runner"
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
msgid "Gitaly Servers"
msgstr ""
+msgid "Go back"
+msgstr ""
+
msgid "Go to your fork"
msgstr "前往您的分支 (fork) "
@@ -1869,9 +2234,6 @@ msgstr "找不到群組"
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr "你可以管理群組內所有成員的每個專案的存取權限"
-msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
-msgstr ""
-
msgid "GroupsTree|Create a project in this group."
msgstr "在此群組建立新的專案"
@@ -1902,6 +2264,9 @@ msgstr "不好意思,沒有搜尋到任何符合條件的群組或專案"
msgid "Have your users email"
msgstr ""
+msgid "Header message"
+msgstr ""
+
msgid "Health Check"
msgstr "健康檢查"
@@ -1920,6 +2285,15 @@ msgstr "沒有檢測到健康問題"
msgid "HealthCheck|Unhealthy"
msgstr "不良"
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -1930,12 +2304,39 @@ msgstr "歷史"
msgid "Housekeeping successfully started"
msgstr "已開始維護"
+msgid "Identity provider single sign on URL"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
msgid "If you already have files you can push them using the %{link_to_cli} below."
msgstr ""
+msgid "If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
msgid "Import repository"
msgstr "匯入檔案庫 (repository)"
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr ""
@@ -1958,6 +2359,9 @@ msgstr[0] ""
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
+msgid "Integrations"
+msgstr ""
+
msgid "Interested parties can even contribute by pushing commits if they want to."
msgstr ""
@@ -2012,6 +2416,9 @@ msgstr ""
msgid "June"
msgstr ""
+msgid "Koding"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -2042,12 +2449,30 @@ msgstr "停用"
msgid "LFSStatus|Enabled"
msgstr "啟用"
+msgid "Label"
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
msgid "Labels"
msgstr "標籤"
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
msgid "Labels can be applied to issues and merge requests to categorize them."
msgstr ""
+msgid "Labels|Promote label %{labelTitle} to Group Label?"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "最近 %d 天"
@@ -2106,6 +2531,9 @@ msgstr ""
msgid "List"
msgstr ""
+msgid "List your GitHub repositories"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -2118,9 +2546,6 @@ msgstr ""
msgid "Lock not found"
msgstr ""
-msgid "Lock this %{issuableDisplayName}? Only project members will be able to comment."
-msgstr ""
-
msgid "Locked"
msgstr "鎖定"
@@ -2136,9 +2561,21 @@ msgstr "登入"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
msgid "Manage labels"
msgstr ""
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
msgid "Mar"
msgstr ""
@@ -2160,6 +2597,9 @@ msgstr "中位數"
msgid "Members"
msgstr "成員"
+msgid "Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
msgid "Merge Requests"
msgstr "合併請求 (merge request)"
@@ -2172,15 +2612,87 @@ msgstr "合併請求"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
-msgid "MergeRequest|Approved"
-msgstr ""
-
msgid "Merged"
msgstr ""
msgid "Messages"
msgstr "公告"
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics|Business"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the chart's vertical axis. Usually the type of the unit being charted. The horizontal axis (X-axis) always represents time."
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|Name"
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Query"
+msgstr ""
+
+msgid "Metrics|Response"
+msgstr ""
+
+msgid "Metrics|System"
+msgstr ""
+
+msgid "Metrics|Type"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
msgid "Milestone"
msgstr ""
@@ -2196,6 +2708,15 @@ msgstr ""
msgid "Milestones|Milestone %{milestoneTitle} was not found"
msgstr ""
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "新增 SSH 金鑰"
@@ -2208,6 +2729,9 @@ msgstr ""
msgid "Monitoring"
msgstr "監控"
+msgid "More info"
+msgstr ""
+
msgid "More information"
msgstr ""
@@ -2281,6 +2805,9 @@ msgstr "新子群組"
msgid "New tag"
msgstr "新增標籤"
+msgid "No Label"
+msgstr ""
+
msgid "No assignee"
msgstr ""
@@ -2299,6 +2826,9 @@ msgstr ""
msgid "No file chosen"
msgstr ""
+msgid "No labels created yet."
+msgstr ""
+
msgid "No repository"
msgstr "找不到檔案庫 (repository)"
@@ -2314,6 +2844,12 @@ msgstr ""
msgid "Not available"
msgstr "無法使用"
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
msgid "Not confidential"
msgstr ""
@@ -2323,6 +2859,18 @@ msgstr "資料不足"
msgid "Note that the master branch is automatically protected. %{link_to_protected_branches}"
msgstr ""
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
msgid "Notification events"
msgstr "事件通知"
@@ -2407,6 +2955,12 @@ msgstr ""
msgid "OfSearchInADropdown|Filter"
msgstr "篩選"
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{ssh_link}"
+msgstr ""
+
+msgid "Online IDE integration settings."
+msgstr ""
+
msgid "Only project members can comment."
msgstr "只有群組成員才能留言。"
@@ -2428,12 +2982,18 @@ msgstr "選項"
msgid "Otherwise it is recommended you start with one of the options below."
msgstr ""
+msgid "Outbound requests"
+msgstr ""
+
msgid "Overview"
msgstr "總覽"
msgid "Owner"
msgstr "所有權"
+msgid "Pages"
+msgstr ""
+
msgid "Pagination|Last »"
msgstr "最末頁 »"
@@ -2446,9 +3006,21 @@ msgstr "上一頁"
msgid "Pagination|« First"
msgstr "« 第一頁"
+msgid "Part of merge request changes"
+msgstr ""
+
msgid "Password"
msgstr "密碼"
+msgid "Pending"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
msgid "Pipeline"
msgstr "流水線 (pipeline) "
@@ -2530,9 +3102,36 @@ msgstr "去年的流水線"
msgid "Pipelines|Build with confidence"
msgstr ""
+msgid "Pipelines|CI Lint"
+msgstr "CI Lint"
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr "清除運行器快取"
+
msgid "Pipelines|Get started with Pipelines"
msgstr ""
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
msgid "Pipeline|Retry pipeline"
msgstr ""
@@ -2563,6 +3162,9 @@ msgstr "於階段"
msgid "Pipeline|with stages"
msgstr "於階段"
+msgid "PlantUML"
+msgstr ""
+
msgid "Play"
msgstr ""
@@ -2572,6 +3174,12 @@ msgstr ""
msgid "Please solve the reCAPTCHA"
msgstr ""
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
msgid "Preferences"
msgstr "偏好設定"
@@ -2626,6 +3234,9 @@ msgstr "你的帳號目前擁有這些群組:"
msgid "Profiles|your account"
msgstr "你的帳號"
+msgid "Profiling - Performance bar"
+msgstr ""
+
msgid "Programming languages used in this repository"
msgstr ""
@@ -2650,9 +3261,6 @@ msgstr ""
msgid "Project avatar in repository: %{link}"
msgstr ""
-msgid "Project cache successfully reset."
-msgstr ""
-
msgid "Project details"
msgstr "專案細節"
@@ -2749,6 +3357,12 @@ msgstr "抱歉,沒有符合搜尋條件的專案"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "此功能需要瀏覽器支援 localStorage"
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|
.')).toEqual('This is a text with html.');
+ expect(textUtils.stripHtml('This is a text with
html
.')).toEqual(
+ 'This is a text with html.',
+ );
});
it('replaces html tags with the provided replacement', () => {
- expect(textUtils.stripHtml('This is a text with
html
.', ' ')).toEqual('This is a text with html .');
+ expect(textUtils.stripHtml('This is a text with
', cached_markdown_version: CacheMarkdownField::CACHE_VERSION) }
describe '#render' do
diff --git a/spec/lib/banzai/redactor_spec.rb b/spec/lib/banzai/redactor_spec.rb
index 441f3725985..aaeec953e4b 100644
--- a/spec/lib/banzai/redactor_spec.rb
+++ b/spec/lib/banzai/redactor_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe Banzai::Redactor do
let(:user) { create(:user) }
let(:project) { build(:project) }
- let(:redactor) { described_class.new(project, user) }
+ let(:redactor) { described_class.new(Banzai::RenderContext.new(project, user)) }
describe '#redact' do
context 'when reference not visible to user' do
@@ -54,7 +54,7 @@ describe Banzai::Redactor do
context 'when project is in pending delete' do
let!(:issue) { create(:issue, project: project) }
- let(:redactor) { described_class.new(project, user) }
+ let(:redactor) { described_class.new(Banzai::RenderContext.new(project, user)) }
before do
project.update(pending_delete: true)
diff --git a/spec/lib/banzai/reference_parser/base_parser_spec.rb b/spec/lib/banzai/reference_parser/base_parser_spec.rb
index 6175d4c4ca9..4e6e8eca38a 100644
--- a/spec/lib/banzai/reference_parser/base_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/base_parser_spec.rb
@@ -5,13 +5,14 @@ describe Banzai::ReferenceParser::BaseParser do
let(:user) { create(:user) }
let(:project) { create(:project, :public) }
+ let(:context) { Banzai::RenderContext.new(project, user) }
subject do
klass = Class.new(described_class) do
self.reference_type = :foo
end
- klass.new(project, user)
+ klass.new(context)
end
describe '.reference_type=' do
@@ -23,6 +24,19 @@ describe Banzai::ReferenceParser::BaseParser do
end
end
+ describe '#project_for_node' do
+ it 'returns the Project for a node' do
+ document = instance_double('document', fragment?: false)
+ project = instance_double('project')
+ object = instance_double('object', project: project)
+ node = instance_double('node', document: document)
+
+ context.associate_document(document, object)
+
+ expect(subject.project_for_node(node)).to eq(project)
+ end
+ end
+
describe '#nodes_visible_to_user' do
let(:link) { empty_html_link }
@@ -164,7 +178,7 @@ describe Banzai::ReferenceParser::BaseParser do
self.reference_type = :test
end
- instance = dummy.new(project, user)
+ instance = dummy.new(Banzai::RenderContext.new(project, user))
document = Nokogiri::HTML.fragment('')
expect(instance).to receive(:gather_references)
diff --git a/spec/lib/banzai/reference_parser/commit_parser_spec.rb b/spec/lib/banzai/reference_parser/commit_parser_spec.rb
index 3505659c2c3..cca53a8b9b9 100644
--- a/spec/lib/banzai/reference_parser/commit_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/commit_parser_spec.rb
@@ -5,7 +5,7 @@ describe Banzai::ReferenceParser::CommitParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
- subject { described_class.new(project, user) }
+ subject { described_class.new(Banzai::RenderContext.new(project, user)) }
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb b/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb
index 21813177deb..ff3b82cc482 100644
--- a/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb
@@ -5,7 +5,7 @@ describe Banzai::ReferenceParser::CommitRangeParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
- subject { described_class.new(project, user) }
+ subject { described_class.new(Banzai::RenderContext.new(project, user)) }
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
@@ -107,12 +107,9 @@ describe Banzai::ReferenceParser::CommitRangeParser do
describe '#find_object' do
let(:range) { double(:range) }
- before do
- expect(CommitRange).to receive(:new).and_return(range)
- end
-
context 'when the range has valid commits' do
it 'returns the commit range' do
+ expect(CommitRange).to receive(:new).and_return(range)
expect(range).to receive(:valid_commits?).and_return(true)
expect(subject.find_object(project, '123..456')).to eq(range)
@@ -121,10 +118,19 @@ describe Banzai::ReferenceParser::CommitRangeParser do
context 'when the range does not have any valid commits' do
it 'returns nil' do
+ expect(CommitRange).to receive(:new).and_return(range)
expect(range).to receive(:valid_commits?).and_return(false)
expect(subject.find_object(project, '123..456')).to be_nil
end
end
+
+ context 'group context' do
+ it 'returns nil' do
+ group = create(:group)
+
+ expect(subject.find_object(group, '123..456')).to be_nil
+ end
+ end
end
end
diff --git a/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb b/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb
index 25969b65168..1cb31e57114 100644
--- a/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb
@@ -5,7 +5,7 @@ describe Banzai::ReferenceParser::ExternalIssueParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
- subject { described_class.new(project, user) }
+ subject { described_class.new(Banzai::RenderContext.new(project, user)) }
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/issue_parser_spec.rb b/spec/lib/banzai/reference_parser/issue_parser_spec.rb
index 0a63567ee40..77c2064caba 100644
--- a/spec/lib/banzai/reference_parser/issue_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/issue_parser_spec.rb
@@ -7,7 +7,7 @@ describe Banzai::ReferenceParser::IssueParser do
let(:user) { create(:user) }
let(:issue) { create(:issue, project: project) }
let(:link) { empty_html_link }
- subject { described_class.new(project, user) }
+ subject { described_class.new(Banzai::RenderContext.new(project, user)) }
describe '#nodes_visible_to_user' do
context 'when the link has a data-issue attribute' do
@@ -117,4 +117,27 @@ describe Banzai::ReferenceParser::IssueParser do
expect(subject.records_for_nodes(nodes)).to eq({ link => issue })
end
end
+
+ context 'when checking multiple merge requests on another project' do
+ let(:other_project) { create(:project, :public) }
+ let(:other_issue) { create(:issue, project: other_project) }
+
+ let(:control_links) do
+ [issue_link(other_issue)]
+ end
+
+ let(:actual_links) do
+ control_links + [issue_link(create(:issue, project: other_project))]
+ end
+
+ def issue_link(issue)
+ Nokogiri::HTML.fragment(%Q{}).children[0]
+ end
+
+ before do
+ project.add_developer(user)
+ end
+
+ it_behaves_like 'no N+1 queries'
+ end
end
diff --git a/spec/lib/banzai/reference_parser/label_parser_spec.rb b/spec/lib/banzai/reference_parser/label_parser_spec.rb
index b700161d6c2..e4df2533821 100644
--- a/spec/lib/banzai/reference_parser/label_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/label_parser_spec.rb
@@ -6,7 +6,7 @@ describe Banzai::ReferenceParser::LabelParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
let(:label) { create(:label, project: project) }
- subject { described_class.new(project, user) }
+ subject { described_class.new(Banzai::RenderContext.new(project, user)) }
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb b/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb
index 775749ae3a7..5417b1f00be 100644
--- a/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb
@@ -4,14 +4,13 @@ describe Banzai::ReferenceParser::MergeRequestParser do
include ReferenceParserHelpers
let(:user) { create(:user) }
- let(:merge_request) { create(:merge_request) }
- subject { described_class.new(merge_request.target_project, user) }
+ let(:project) { create(:project, :public) }
+ let(:merge_request) { create(:merge_request, source_project: project) }
+ subject { described_class.new(Banzai::RenderContext.new(merge_request.target_project, user)) }
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
context 'when the link has a data-issue attribute' do
- let(:project) { merge_request.target_project }
-
before do
project.update_attribute(:visibility_level, Gitlab::VisibilityLevel::PUBLIC)
link['data-merge-request'] = merge_request.id.to_s
@@ -40,4 +39,27 @@ describe Banzai::ReferenceParser::MergeRequestParser do
end
end
end
+
+ context 'when checking multiple merge requests on another project' do
+ let(:other_project) { create(:project, :public) }
+ let(:other_merge_request) { create(:merge_request, source_project: other_project) }
+
+ let(:control_links) do
+ [merge_request_link(other_merge_request)]
+ end
+
+ let(:actual_links) do
+ control_links + [merge_request_link(create(:merge_request, :conflict, source_project: other_project))]
+ end
+
+ def merge_request_link(merge_request)
+ Nokogiri::HTML.fragment(%Q{}).children[0]
+ end
+
+ before do
+ project.add_developer(user)
+ end
+
+ it_behaves_like 'no N+1 queries'
+ end
end
diff --git a/spec/lib/banzai/reference_parser/milestone_parser_spec.rb b/spec/lib/banzai/reference_parser/milestone_parser_spec.rb
index 7dacdf8d629..751d042ffde 100644
--- a/spec/lib/banzai/reference_parser/milestone_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/milestone_parser_spec.rb
@@ -6,7 +6,7 @@ describe Banzai::ReferenceParser::MilestoneParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
let(:milestone) { create(:milestone, project: project) }
- subject { described_class.new(project, user) }
+ subject { described_class.new(Banzai::RenderContext.new(project, user)) }
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/snippet_parser_spec.rb b/spec/lib/banzai/reference_parser/snippet_parser_spec.rb
index 69ec3f66aa8..d410bd4c164 100644
--- a/spec/lib/banzai/reference_parser/snippet_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/snippet_parser_spec.rb
@@ -9,7 +9,7 @@ describe Banzai::ReferenceParser::SnippetParser do
let(:external_user) { create(:user, :external) }
let(:project_member) { create(:user) }
- subject { described_class.new(project, user) }
+ subject { described_class.new(Banzai::RenderContext.new(project, user)) }
let(:link) { empty_html_link }
def visible_references(snippet_visibility, user = nil)
diff --git a/spec/lib/banzai/reference_parser/user_parser_spec.rb b/spec/lib/banzai/reference_parser/user_parser_spec.rb
index b079a3be029..112447f098e 100644
--- a/spec/lib/banzai/reference_parser/user_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/user_parser_spec.rb
@@ -6,7 +6,7 @@ describe Banzai::ReferenceParser::UserParser do
let(:group) { create(:group) }
let(:user) { create(:user) }
let(:project) { create(:project, :public, group: group, creator: user) }
- subject { described_class.new(project, user) }
+ subject { described_class.new(Banzai::RenderContext.new(project, user)) }
let(:link) { empty_html_link }
describe '#referenced_by' do
diff --git a/spec/lib/banzai/render_context_spec.rb b/spec/lib/banzai/render_context_spec.rb
new file mode 100644
index 00000000000..ad17db11613
--- /dev/null
+++ b/spec/lib/banzai/render_context_spec.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Banzai::RenderContext do
+ let(:document) { Nokogiri::HTML.fragment('
hello
') }
+
+ describe '#project_for_node' do
+ it 'returns the default project if no associated project was found' do
+ project = instance_double('project')
+ context = described_class.new(project)
+
+ expect(context.project_for_node(document)).to eq(project)
+ end
+
+ it 'returns the associated project if one was associated explicitly' do
+ project = instance_double('project')
+ obj = instance_double('object', project: project)
+ context = described_class.new
+
+ context.associate_document(document, obj)
+
+ expect(context.project_for_node(document)).to eq(project)
+ end
+
+ it 'returns the project associated with a DocumentFragment when using a node' do
+ project = instance_double('project')
+ obj = instance_double('object', project: project)
+ context = described_class.new
+ node = document.children.first
+
+ context.associate_document(document, obj)
+
+ expect(context.project_for_node(node)).to eq(project)
+ end
+ end
+end
diff --git a/spec/lib/forever_spec.rb b/spec/lib/forever_spec.rb
new file mode 100644
index 00000000000..cf40c467c72
--- /dev/null
+++ b/spec/lib/forever_spec.rb
@@ -0,0 +1,21 @@
+require 'spec_helper'
+
+describe Forever do
+ describe '.date' do
+ subject { described_class.date }
+
+ context 'when using PostgreSQL' do
+ it 'should return Postgresql future date' do
+ allow(Gitlab::Database).to receive(:postgresql?).and_return(true)
+ expect(subject).to eq(described_class::POSTGRESQL_DATE)
+ end
+ end
+
+ context 'when using MySQL' do
+ it 'should return MySQL future date' do
+ allow(Gitlab::Database).to receive(:postgresql?).and_return(false)
+ expect(subject).to eq(described_class::MYSQL_DATE)
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/auth/ldap/access_spec.rb b/spec/lib/gitlab/auth/ldap/access_spec.rb
index 9b3916bf9e3..6b251d824f7 100644
--- a/spec/lib/gitlab/auth/ldap/access_spec.rb
+++ b/spec/lib/gitlab/auth/ldap/access_spec.rb
@@ -1,6 +1,8 @@
require 'spec_helper'
describe Gitlab::Auth::LDAP::Access do
+ include LdapHelpers
+
let(:access) { described_class.new user }
let(:user) { create(:omniauth_user) }
@@ -32,8 +34,10 @@ describe Gitlab::Auth::LDAP::Access do
end
context 'when the user is found' do
+ let(:ldap_user) { Gitlab::Auth::LDAP::Person.new(Net::LDAP::Entry.new, 'ldapmain') }
+
before do
- allow(Gitlab::Auth::LDAP::Person).to receive(:find_by_dn).and_return(:ldap_user)
+ allow(Gitlab::Auth::LDAP::Person).to receive(:find_by_dn).and_return(ldap_user)
end
context 'and the user is disabled via active directory' do
@@ -120,6 +124,22 @@ describe Gitlab::Auth::LDAP::Access do
end
end
end
+
+ context 'when the connection fails' do
+ before do
+ raise_ldap_connection_error
+ end
+
+ it 'does not block the user' do
+ access.allowed?
+
+ expect(user.ldap_blocked?).to be_falsey
+ end
+
+ it 'denies access' do
+ expect(access.allowed?).to be_falsey
+ end
+ end
end
describe '#block_user' do
diff --git a/spec/lib/gitlab/auth/ldap/adapter_spec.rb b/spec/lib/gitlab/auth/ldap/adapter_spec.rb
index 10c60d792bd..3eeaf3862f6 100644
--- a/spec/lib/gitlab/auth/ldap/adapter_spec.rb
+++ b/spec/lib/gitlab/auth/ldap/adapter_spec.rb
@@ -124,16 +124,36 @@ describe Gitlab::Auth::LDAP::Adapter do
context "when the search raises an LDAP exception" do
before do
+ allow(adapter).to receive(:renew_connection_adapter).and_return(ldap)
allow(ldap).to receive(:search) { raise Net::LDAP::Error, "some error" }
allow(Rails.logger).to receive(:warn)
end
- it { is_expected.to eq [] }
+ context 'retries the operation' do
+ before do
+ stub_const("#{described_class}::MAX_SEARCH_RETRIES", 3)
+ end
- it 'logs the error' do
- subject
- expect(Rails.logger).to have_received(:warn).with(
- "LDAP search raised exception Net::LDAP::Error: some error")
+ it 'as many times as MAX_SEARCH_RETRIES' do
+ expect(ldap).to receive(:search).exactly(3).times
+ expect { subject }.to raise_error(Gitlab::Auth::LDAP::LDAPConnectionError)
+ end
+
+ context 'when no more retries' do
+ before do
+ stub_const("#{described_class}::MAX_SEARCH_RETRIES", 1)
+ end
+
+ it 'raises the exception' do
+ expect { subject }.to raise_error(Gitlab::Auth::LDAP::LDAPConnectionError)
+ end
+
+ it 'logs the error' do
+ expect { subject }.to raise_error(Gitlab::Auth::LDAP::LDAPConnectionError)
+ expect(Rails.logger).to have_received(:warn).with(
+ "LDAP search raised exception Net::LDAP::Error: some error")
+ end
+ end
end
end
end
diff --git a/spec/lib/gitlab/auth/o_auth/user_spec.rb b/spec/lib/gitlab/auth/o_auth/user_spec.rb
index 0c71f1d8ca6..64f3d09a25b 100644
--- a/spec/lib/gitlab/auth/o_auth/user_spec.rb
+++ b/spec/lib/gitlab/auth/o_auth/user_spec.rb
@@ -1,6 +1,8 @@
require 'spec_helper'
describe Gitlab::Auth::OAuth::User do
+ include LdapHelpers
+
let(:oauth_user) { described_class.new(auth_hash) }
let(:gl_user) { oauth_user.gl_user }
let(:uid) { 'my-uid' }
@@ -38,10 +40,6 @@ describe Gitlab::Auth::OAuth::User do
end
describe '#save' do
- def stub_ldap_config(messages)
- allow(Gitlab::Auth::LDAP::Config).to receive_messages(messages)
- end
-
let(:provider) { 'twitter' }
describe 'when account exists on server' do
@@ -269,20 +267,47 @@ describe Gitlab::Auth::OAuth::User do
end
context 'when an LDAP person is not found by uid' do
- it 'tries to find an LDAP person by DN and adds the omniauth identity to the user' do
+ it 'tries to find an LDAP person by email and adds the omniauth identity to the user' do
allow(Gitlab::Auth::LDAP::Person).to receive(:find_by_uid).and_return(nil)
- allow(Gitlab::Auth::LDAP::Person).to receive(:find_by_dn).and_return(ldap_user)
+ allow(Gitlab::Auth::LDAP::Person).to receive(:find_by_email).and_return(ldap_user)
oauth_user.save
identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
- expect(identities_as_hash)
- .to match_array(
- [
- { provider: 'ldapmain', extern_uid: dn },
- { provider: 'twitter', extern_uid: uid }
- ]
- )
+ expect(identities_as_hash).to match_array(result_identities(dn, uid))
+ end
+
+ context 'when also not found by email' do
+ it 'tries to find an LDAP person by DN and adds the omniauth identity to the user' do
+ allow(Gitlab::Auth::LDAP::Person).to receive(:find_by_uid).and_return(nil)
+ allow(Gitlab::Auth::LDAP::Person).to receive(:find_by_email).and_return(nil)
+ allow(Gitlab::Auth::LDAP::Person).to receive(:find_by_dn).and_return(ldap_user)
+
+ oauth_user.save
+
+ identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
+ expect(identities_as_hash).to match_array(result_identities(dn, uid))
+ end
+ end
+ end
+
+ def result_identities(dn, uid)
+ [
+ { provider: 'ldapmain', extern_uid: dn },
+ { provider: 'twitter', extern_uid: uid }
+ ]
+ end
+
+ context 'when there is an LDAP connection error' do
+ before do
+ raise_ldap_connection_error
+ end
+
+ it 'does not save the identity' do
+ oauth_user.save
+
+ identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
+ expect(identities_as_hash).to match_array([{ provider: 'twitter', extern_uid: uid }])
end
end
end
@@ -739,4 +764,19 @@ describe Gitlab::Auth::OAuth::User do
expect(oauth_user.find_user).to eql gl_user
end
end
+
+ describe '#find_ldap_person' do
+ context 'when LDAP connection fails' do
+ before do
+ raise_ldap_connection_error
+ end
+
+ it 'returns nil' do
+ adapter = Gitlab::Auth::LDAP::Adapter.new('ldapmain')
+ hash = OmniAuth::AuthHash.new(uid: 'whatever', provider: 'ldapmain')
+
+ expect(oauth_user.send(:find_ldap_person, hash, adapter)).to be_nil
+ end
+ end
+ end
end
diff --git a/spec/lib/gitlab/auth_spec.rb b/spec/lib/gitlab/auth_spec.rb
index 18cef8ec996..9ccd0b206cc 100644
--- a/spec/lib/gitlab/auth_spec.rb
+++ b/spec/lib/gitlab/auth_spec.rb
@@ -5,7 +5,7 @@ describe Gitlab::Auth do
describe 'constants' do
it 'API_SCOPES contains all scopes for API access' do
- expect(subject::API_SCOPES).to eq %i[api read_user sudo]
+ expect(subject::API_SCOPES).to eq %i[api read_user sudo read_repository]
end
it 'OPENID_SCOPES contains all scopes for OpenID Connect' do
@@ -19,7 +19,7 @@ describe Gitlab::Auth do
it 'optional_scopes contains all non-default scopes' do
stub_container_registry_config(enabled: true)
- expect(subject.optional_scopes).to eq %i[read_user sudo read_registry openid]
+ expect(subject.optional_scopes).to eq %i[read_user sudo read_repository read_registry openid]
end
context 'registry_scopes' do
@@ -231,7 +231,7 @@ describe Gitlab::Auth do
.to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, full_authentication_abilities))
end
- it 'falls through oauth authentication when the username is oauth2' do
+ it 'fails through oauth authentication when the username is oauth2' do
user = create(
:user,
username: 'oauth2',
@@ -255,6 +255,122 @@ describe Gitlab::Auth do
expect { gl_auth.find_for_git_client('foo', 'bar', project: nil, ip: 'ip') }.to raise_error(Gitlab::Auth::MissingPersonalAccessTokenError)
end
+
+ context 'while using deploy tokens' do
+ let(:project) { create(:project) }
+ let(:auth_failure) { Gitlab::Auth::Result.new(nil, nil) }
+
+ context 'when the deploy token has read_repository as scope' do
+ let(:deploy_token) { create(:deploy_token, read_registry: false, projects: [project]) }
+ let(:login) { deploy_token.username }
+
+ it 'succeeds when login and token are valid' do
+ auth_success = Gitlab::Auth::Result.new(deploy_token, project, :deploy_token, [:download_code])
+
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: login)
+ expect(gl_auth.find_for_git_client(login, deploy_token.token, project: project, ip: 'ip'))
+ .to eq(auth_success)
+ end
+
+ it 'fails when login is not valid' do
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: 'random_login')
+ expect(gl_auth.find_for_git_client('random_login', deploy_token.token, project: project, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+
+ it 'fails when token is not valid' do
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: login)
+ expect(gl_auth.find_for_git_client(login, '123123', project: project, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+
+ it 'fails if token is nil' do
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: login)
+ expect(gl_auth.find_for_git_client(login, nil, project: project, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+
+ it 'fails if token is not related to project' do
+ another_deploy_token = create(:deploy_token)
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: login)
+ expect(gl_auth.find_for_git_client(login, another_deploy_token.token, project: project, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+
+ it 'fails if token has been revoked' do
+ deploy_token.revoke!
+
+ expect(deploy_token.revoked?).to be_truthy
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: 'deploy-token')
+ expect(gl_auth.find_for_git_client('deploy-token', deploy_token.token, project: project, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+ end
+
+ context 'when the deploy token has read_registry as a scope' do
+ let(:deploy_token) { create(:deploy_token, read_repository: false, projects: [project]) }
+ let(:login) { deploy_token.username }
+
+ context 'when registry enabled' do
+ before do
+ stub_container_registry_config(enabled: true)
+ end
+
+ it 'succeeds when login and token are valid' do
+ auth_success = Gitlab::Auth::Result.new(deploy_token, project, :deploy_token, [:read_container_image])
+
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: login)
+ expect(gl_auth.find_for_git_client(login, deploy_token.token, project: nil, ip: 'ip'))
+ .to eq(auth_success)
+ end
+
+ it 'fails when login is not valid' do
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: 'random_login')
+ expect(gl_auth.find_for_git_client('random_login', deploy_token.token, project: project, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+
+ it 'fails when token is not valid' do
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: login)
+ expect(gl_auth.find_for_git_client(login, '123123', project: project, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+
+ it 'fails if token is nil' do
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: login)
+ expect(gl_auth.find_for_git_client(login, nil, project: nil, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+
+ it 'fails if token is not related to project' do
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: login)
+ expect(gl_auth.find_for_git_client(login, 'abcdef', project: nil, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+
+ it 'fails if token has been revoked' do
+ deploy_token.revoke!
+
+ expect(deploy_token.revoked?).to be_truthy
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: 'deploy-token')
+ expect(gl_auth.find_for_git_client('deploy-token', deploy_token.token, project: nil, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+ end
+
+ context 'when registry disabled' do
+ before do
+ stub_container_registry_config(enabled: false)
+ end
+
+ it 'fails when login and token are valid' do
+ expect(gl_auth).to receive(:rate_limit!).with('ip', success: false, login: login)
+ expect(gl_auth.find_for_git_client(login, deploy_token.token, project: nil, ip: 'ip'))
+ .to eq(auth_failure)
+ end
+ end
+ end
+ end
end
describe 'find_with_user_password' do
diff --git a/spec/lib/gitlab/background_migration/set_confidential_note_events_on_services_spec.rb b/spec/lib/gitlab/background_migration/set_confidential_note_events_on_services_spec.rb
new file mode 100644
index 00000000000..6f3fb994f17
--- /dev/null
+++ b/spec/lib/gitlab/background_migration/set_confidential_note_events_on_services_spec.rb
@@ -0,0 +1,31 @@
+require 'spec_helper'
+
+describe Gitlab::BackgroundMigration::SetConfidentialNoteEventsOnServices, :migration, schema: 20180122154930 do
+ let(:services) { table(:services) }
+
+ describe '#perform' do
+ it 'migrates services where note_events is true' do
+ service = services.create(confidential_note_events: nil, note_events: true)
+
+ subject.perform(service.id, service.id)
+
+ expect(service.reload.confidential_note_events).to eq(true)
+ end
+
+ it 'ignores services where note_events is false' do
+ service = services.create(confidential_note_events: nil, note_events: false)
+
+ subject.perform(service.id, service.id)
+
+ expect(service.reload.confidential_note_events).to eq(nil)
+ end
+
+ it 'ignores services where confidential_note_events has already been set' do
+ service = services.create(confidential_note_events: false, note_events: true)
+
+ subject.perform(service.id, service.id)
+
+ expect(service.reload.confidential_note_events).to eq(false)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/background_migration/set_confidential_note_events_on_webhooks_spec.rb b/spec/lib/gitlab/background_migration/set_confidential_note_events_on_webhooks_spec.rb
new file mode 100644
index 00000000000..82b484b7d5b
--- /dev/null
+++ b/spec/lib/gitlab/background_migration/set_confidential_note_events_on_webhooks_spec.rb
@@ -0,0 +1,31 @@
+require 'spec_helper'
+
+describe Gitlab::BackgroundMigration::SetConfidentialNoteEventsOnWebhooks, :migration, schema: 20180104131052 do
+ let(:web_hooks) { table(:web_hooks) }
+
+ describe '#perform' do
+ it 'migrates hooks where note_events is true' do
+ hook = web_hooks.create(confidential_note_events: nil, note_events: true)
+
+ subject.perform(hook.id, hook.id)
+
+ expect(hook.reload.confidential_note_events).to eq(true)
+ end
+
+ it 'ignores hooks where note_events is false' do
+ hook = web_hooks.create(confidential_note_events: nil, note_events: false)
+
+ subject.perform(hook.id, hook.id)
+
+ expect(hook.reload.confidential_note_events).to eq(nil)
+ end
+
+ it 'ignores hooks where confidential_note_events has already been set' do
+ hook = web_hooks.create(confidential_note_events: false, note_events: true)
+
+ subject.perform(hook.id, hook.id)
+
+ expect(hook.reload.confidential_note_events).to eq(false)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/bitbucket_import/importer_spec.rb b/spec/lib/gitlab/bitbucket_import/importer_spec.rb
index a6a1d9e619f..c63120b0b29 100644
--- a/spec/lib/gitlab/bitbucket_import/importer_spec.rb
+++ b/spec/lib/gitlab/bitbucket_import/importer_spec.rb
@@ -137,7 +137,7 @@ describe Gitlab::BitbucketImport::Importer do
it 'imports to the project disk_path' do
expect(project.wiki).to receive(:repository_exists?) { false }
expect(importer.gitlab_shell).to receive(:import_repository).with(
- project.repository_storage_path,
+ project.repository_storage,
project.wiki.disk_path,
project.import_url + '/wiki'
)
diff --git a/spec/lib/gitlab/cache/ci/project_pipeline_status_spec.rb b/spec/lib/gitlab/cache/ci/project_pipeline_status_spec.rb
index 16704ff5e77..18658588a40 100644
--- a/spec/lib/gitlab/cache/ci/project_pipeline_status_spec.rb
+++ b/spec/lib/gitlab/cache/ci/project_pipeline_status_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe Gitlab::Cache::Ci::ProjectPipelineStatus, :clean_gitlab_redis_cache do
let!(:project) { create(:project, :repository) }
let(:pipeline_status) { described_class.new(project) }
- let(:cache_key) { "projects/#{project.id}/pipeline_status" }
+ let(:cache_key) { described_class.cache_key_for_project(project) }
describe '.load_for_project' do
it "loads the status" do
diff --git a/spec/lib/gitlab/ci/status/build/action_spec.rb b/spec/lib/gitlab/ci/status/build/action_spec.rb
index d612d29e3e0..bdec582b57b 100644
--- a/spec/lib/gitlab/ci/status/build/action_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/action_spec.rb
@@ -53,4 +53,14 @@ describe Gitlab::Ci::Status::Build::Action do
end
end
end
+
+ describe '#badge_tooltip' do
+ let(:user) { create(:user) }
+ let(:build) { create(:ci_build, :non_playable) }
+ let(:status) { Gitlab::Ci::Status::Core.new(build, user) }
+
+ it 'returns the status' do
+ expect(subject.badge_tooltip).to eq('created')
+ end
+ end
end
diff --git a/spec/lib/gitlab/ci/status/build/cancelable_spec.rb b/spec/lib/gitlab/ci/status/build/cancelable_spec.rb
index 9cdebaa5cf2..78d6fa65b5a 100644
--- a/spec/lib/gitlab/ci/status/build/cancelable_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/cancelable_spec.rb
@@ -40,6 +40,24 @@ describe Gitlab::Ci::Status::Build::Cancelable do
end
end
+ describe '#status_tooltip' do
+ it 'does not override status status_tooltip' do
+ expect(status).to receive(:status_tooltip)
+
+ subject.status_tooltip
+ end
+ end
+
+ describe '#badge_tooltip' do
+ let(:user) { create(:user) }
+ let(:build) { create(:ci_build) }
+ let(:status) { Gitlab::Ci::Status::Core.new(build, user) }
+
+ it 'returns the status' do
+ expect(subject.badge_tooltip).to eq('pending')
+ end
+ end
+
describe 'action details' do
let(:user) { create(:user) }
let(:build) { create(:ci_build) }
@@ -72,6 +90,10 @@ describe Gitlab::Ci::Status::Build::Cancelable do
describe '#action_title' do
it { expect(subject.action_title).to eq 'Cancel' }
end
+
+ describe '#action_button_title' do
+ it { expect(subject.action_button_title).to eq 'Cancel this job' }
+ end
end
describe '.matches?' do
diff --git a/spec/lib/gitlab/ci/status/build/canceled_spec.rb b/spec/lib/gitlab/ci/status/build/canceled_spec.rb
new file mode 100644
index 00000000000..c6b5cc68770
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/build/canceled_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Build::Canceled do
+ let(:user) { create(:user) }
+
+ subject do
+ described_class.new(double('subject'))
+ end
+
+ describe '#illustration' do
+ it { expect(subject.illustration).to include(:image, :size, :title) }
+ end
+
+ describe '.matches?' do
+ subject {described_class.matches?(build, user) }
+
+ context 'when build is canceled' do
+ let(:build) { create(:ci_build, :canceled) }
+
+ it 'is a correct match' do
+ expect(subject).to be true
+ end
+ end
+
+ context 'when build is not canceled' do
+ let(:build) { create(:ci_build) }
+
+ it 'does not match' do
+ expect(subject).to be false
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/build/common_spec.rb b/spec/lib/gitlab/ci/status/build/common_spec.rb
index 2cce7a23ea7..ca3c66f0152 100644
--- a/spec/lib/gitlab/ci/status/build/common_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/common_spec.rb
@@ -38,4 +38,10 @@ describe Gitlab::Ci::Status::Build::Common do
expect(subject.details_path).to include "jobs/#{build.id}"
end
end
+
+ describe '#illustration' do
+ it 'provides a fallback empty state illustration' do
+ expect(subject.illustration).not_to be_empty
+ end
+ end
end
diff --git a/spec/lib/gitlab/ci/status/build/created_spec.rb b/spec/lib/gitlab/ci/status/build/created_spec.rb
new file mode 100644
index 00000000000..8bdfe6ef7a2
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/build/created_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Build::Created do
+ let(:user) { create(:user) }
+
+ subject do
+ described_class.new(double('subject'))
+ end
+
+ describe '#illustration' do
+ it { expect(subject.illustration).to include(:image, :size, :title, :content) }
+ end
+
+ describe '.matches?' do
+ subject {described_class.matches?(build, user) }
+
+ context 'when build is created' do
+ let(:build) { create(:ci_build, :created) }
+
+ it 'is a correct match' do
+ expect(subject).to be true
+ end
+ end
+
+ context 'when build is not created' do
+ let(:build) { create(:ci_build) }
+
+ it 'does not match' do
+ expect(subject).to be false
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/build/erased_spec.rb b/spec/lib/gitlab/ci/status/build/erased_spec.rb
new file mode 100644
index 00000000000..0acd271e375
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/build/erased_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Build::Erased do
+ let(:user) { create(:user) }
+
+ subject do
+ described_class.new(double('subject'))
+ end
+
+ describe '#illustration' do
+ it { expect(subject.illustration).to include(:image, :size, :title) }
+ end
+
+ describe '.matches?' do
+ subject { described_class.matches?(build, user) }
+
+ context 'when build is erased' do
+ let(:build) { create(:ci_build, :success, :erased) }
+
+ it 'is a correct match' do
+ expect(subject).to be true
+ end
+ end
+
+ context 'when build is not erased' do
+ let(:build) { create(:ci_build, :success, :trace_artifact) }
+
+ it 'does not match' do
+ expect(subject).to be false
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/build/factory_spec.rb b/spec/lib/gitlab/ci/status/build/factory_spec.rb
index d196bc6a4c2..d53a7d468e3 100644
--- a/spec/lib/gitlab/ci/status/build/factory_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/factory_spec.rb
@@ -13,7 +13,7 @@ describe Gitlab::Ci::Status::Build::Factory do
end
context 'when build is successful' do
- let(:build) { create(:ci_build, :success) }
+ let(:build) { create(:ci_build, :success, :trace_artifact) }
it 'matches correct core status' do
expect(factory.core_status).to be_a Gitlab::Ci::Status::Success
@@ -38,6 +38,33 @@ describe Gitlab::Ci::Status::Build::Factory do
end
end
+ context 'when build is erased' do
+ let(:build) { create(:ci_build, :success, :erased) }
+
+ it 'matches correct core status' do
+ expect(factory.core_status).to be_a Gitlab::Ci::Status::Success
+ end
+
+ it 'matches correct extended statuses' do
+ expect(factory.extended_statuses)
+ .to eq [Gitlab::Ci::Status::Build::Erased,
+ Gitlab::Ci::Status::Build::Retryable]
+ end
+
+ it 'fabricates a retryable build status' do
+ expect(status).to be_a Gitlab::Ci::Status::Build::Retryable
+ end
+
+ it 'fabricates status with correct details' do
+ expect(status.text).to eq 'passed'
+ expect(status.icon).to eq 'status_success'
+ expect(status.favicon).to eq 'favicon_status_success'
+ expect(status.label).to eq 'passed'
+ expect(status).to have_details
+ expect(status).to have_action
+ end
+ end
+
context 'when build is failed' do
context 'when build is not allowed to fail' do
let(:build) { create(:ci_build, :failed) }
@@ -48,11 +75,12 @@ describe Gitlab::Ci::Status::Build::Factory do
it 'matches correct extended statuses' do
expect(factory.extended_statuses)
- .to eq [Gitlab::Ci::Status::Build::Retryable]
+ .to eq [Gitlab::Ci::Status::Build::Retryable,
+ Gitlab::Ci::Status::Build::Failed]
end
- it 'fabricates a retryable build status' do
- expect(status).to be_a Gitlab::Ci::Status::Build::Retryable
+ it 'fabricates a failed build status' do
+ expect(status).to be_a Gitlab::Ci::Status::Build::Failed
end
it 'fabricates status with correct details' do
@@ -60,13 +88,14 @@ describe Gitlab::Ci::Status::Build::Factory do
expect(status.icon).to eq 'status_failed'
expect(status.favicon).to eq 'favicon_status_failed'
expect(status.label).to eq 'failed'
+ expect(status.status_tooltip).to eq 'failed (unknown failure)'
expect(status).to have_details
expect(status).to have_action
end
end
context 'when build is allowed to fail' do
- let(:build) { create(:ci_build, :failed, :allowed_to_fail) }
+ let(:build) { create(:ci_build, :failed, :allowed_to_fail, :trace_artifact) }
it 'matches correct core status' do
expect(factory.core_status).to be_a Gitlab::Ci::Status::Failed
@@ -75,6 +104,7 @@ describe Gitlab::Ci::Status::Build::Factory do
it 'matches correct extended statuses' do
expect(factory.extended_statuses)
.to eq [Gitlab::Ci::Status::Build::Retryable,
+ Gitlab::Ci::Status::Build::Failed,
Gitlab::Ci::Status::Build::FailedAllowed]
end
@@ -104,7 +134,7 @@ describe Gitlab::Ci::Status::Build::Factory do
it 'matches correct extended statuses' do
expect(factory.extended_statuses)
- .to eq [Gitlab::Ci::Status::Build::Retryable]
+ .to eq [Gitlab::Ci::Status::Build::Canceled, Gitlab::Ci::Status::Build::Retryable]
end
it 'fabricates a retryable build status' do
@@ -115,6 +145,7 @@ describe Gitlab::Ci::Status::Build::Factory do
expect(status.text).to eq 'canceled'
expect(status.icon).to eq 'status_canceled'
expect(status.favicon).to eq 'favicon_status_canceled'
+ expect(status.illustration).to include(:image, :size, :title)
expect(status.label).to eq 'canceled'
expect(status).to have_details
expect(status).to have_action
@@ -156,7 +187,7 @@ describe Gitlab::Ci::Status::Build::Factory do
it 'matches correct extended statuses' do
expect(factory.extended_statuses)
- .to eq [Gitlab::Ci::Status::Build::Cancelable]
+ .to eq [Gitlab::Ci::Status::Build::Pending, Gitlab::Ci::Status::Build::Cancelable]
end
it 'fabricates a cancelable build status' do
@@ -167,6 +198,7 @@ describe Gitlab::Ci::Status::Build::Factory do
expect(status.text).to eq 'pending'
expect(status.icon).to eq 'status_pending'
expect(status.favicon).to eq 'favicon_status_pending'
+ expect(status.illustration).to include(:image, :size, :title, :content)
expect(status.label).to eq 'pending'
expect(status).to have_details
expect(status).to have_action
@@ -180,18 +212,19 @@ describe Gitlab::Ci::Status::Build::Factory do
expect(factory.core_status).to be_a Gitlab::Ci::Status::Skipped
end
- it 'does not match extended statuses' do
- expect(factory.extended_statuses).to be_empty
+ it 'matches correct extended statuses' do
+ expect(factory.extended_statuses).to eq [Gitlab::Ci::Status::Build::Skipped]
end
- it 'fabricates a core skipped status' do
- expect(status).to be_a Gitlab::Ci::Status::Skipped
+ it 'fabricates a skipped build status' do
+ expect(status).to be_a Gitlab::Ci::Status::Build::Skipped
end
it 'fabricates status with correct details' do
expect(status.text).to eq 'skipped'
expect(status.icon).to eq 'status_skipped'
expect(status.favicon).to eq 'favicon_status_skipped'
+ expect(status.illustration).to include(:image, :size, :title)
expect(status.label).to eq 'skipped'
expect(status).to have_details
expect(status).not_to have_action
@@ -208,7 +241,8 @@ describe Gitlab::Ci::Status::Build::Factory do
it 'matches correct extended statuses' do
expect(factory.extended_statuses)
- .to eq [Gitlab::Ci::Status::Build::Play,
+ .to eq [Gitlab::Ci::Status::Build::Manual,
+ Gitlab::Ci::Status::Build::Play,
Gitlab::Ci::Status::Build::Action]
end
@@ -221,6 +255,7 @@ describe Gitlab::Ci::Status::Build::Factory do
expect(status.group).to eq 'manual'
expect(status.icon).to eq 'status_manual'
expect(status.favicon).to eq 'favicon_status_manual'
+ expect(status.illustration).to include(:image, :size, :title, :content)
expect(status.label).to include 'manual play action'
expect(status).to have_details
expect(status.action_path).to include 'play'
@@ -255,7 +290,8 @@ describe Gitlab::Ci::Status::Build::Factory do
it 'matches correct extended statuses' do
expect(factory.extended_statuses)
- .to eq [Gitlab::Ci::Status::Build::Stop,
+ .to eq [Gitlab::Ci::Status::Build::Manual,
+ Gitlab::Ci::Status::Build::Stop,
Gitlab::Ci::Status::Build::Action]
end
diff --git a/spec/lib/gitlab/ci/status/build/failed_allowed_spec.rb b/spec/lib/gitlab/ci/status/build/failed_allowed_spec.rb
index 99a5a7e4aca..bfaa508785e 100644
--- a/spec/lib/gitlab/ci/status/build/failed_allowed_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/failed_allowed_spec.rb
@@ -3,6 +3,7 @@ require 'spec_helper'
describe Gitlab::Ci::Status::Build::FailedAllowed do
let(:status) { double('core status') }
let(:user) { double('user') }
+ let(:build) { create(:ci_build, :failed, :allowed_to_fail) }
subject do
described_class.new(status)
@@ -68,6 +69,28 @@ describe Gitlab::Ci::Status::Build::FailedAllowed do
end
end
+ describe '#badge_tooltip' do
+ let(:user) { create(:user) }
+ let(:failed_status) { Gitlab::Ci::Status::Failed.new(build, user) }
+ let(:build_status) { Gitlab::Ci::Status::Build::Failed.new(failed_status) }
+ let(:status) { described_class.new(build_status) }
+
+ it 'does override badge_tooltip' do
+ expect(status.badge_tooltip).to eq('failed (unknown failure)')
+ end
+ end
+
+ describe '#status_tooltip' do
+ let(:user) { create(:user) }
+ let(:failed_status) { Gitlab::Ci::Status::Failed.new(build, user) }
+ let(:build_status) { Gitlab::Ci::Status::Build::Failed.new(failed_status) }
+ let(:status) { described_class.new(build_status) }
+
+ it 'does override status_tooltip' do
+ expect(status.status_tooltip).to eq 'failed (unknown failure) (allowed to fail)'
+ end
+ end
+
describe '.matches?' do
subject { described_class.matches?(build, user) }
diff --git a/spec/lib/gitlab/ci/status/build/failed_spec.rb b/spec/lib/gitlab/ci/status/build/failed_spec.rb
new file mode 100644
index 00000000000..cadb424ea2c
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/build/failed_spec.rb
@@ -0,0 +1,83 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Build::Failed do
+ let(:build) { create(:ci_build, :script_failure) }
+ let(:status) { double('core status') }
+ let(:user) { double('user') }
+
+ subject { described_class.new(status) }
+
+ describe '#text' do
+ it 'does not override status text' do
+ expect(status).to receive(:text)
+
+ subject.text
+ end
+ end
+
+ describe '#icon' do
+ it 'does not override status icon' do
+ expect(status).to receive(:icon)
+
+ subject.icon
+ end
+ end
+
+ describe '#group' do
+ it 'does not override status group' do
+ expect(status).to receive(:group)
+
+ subject.group
+ end
+ end
+
+ describe '#favicon' do
+ it 'does not override status label' do
+ expect(status).to receive(:favicon)
+
+ subject.favicon
+ end
+ end
+
+ describe '#label' do
+ it 'does not override label' do
+ expect(status).to receive(:label)
+
+ subject.label
+ end
+ end
+
+ describe '#badge_tooltip' do
+ let(:user) { create(:user) }
+ let(:status) { Gitlab::Ci::Status::Failed.new(build, user) }
+
+ it 'does override badge_tooltip' do
+ expect(subject.badge_tooltip).to eq 'failed (script failure)'
+ end
+ end
+
+ describe '#status_tooltip' do
+ let(:user) { create(:user) }
+ let(:status) { Gitlab::Ci::Status::Failed.new(build, user) }
+
+ it 'does override status_tooltip' do
+ expect(subject.status_tooltip).to eq 'failed (script failure)'
+ end
+ end
+
+ describe '.matches?' do
+ context 'with a failed build' do
+ it 'returns true' do
+ expect(described_class.matches?(build, user)).to be_truthy
+ end
+ end
+
+ context 'with any other type of build' do
+ let(:build) { create(:ci_build, :success) }
+
+ it 'returns false' do
+ expect(described_class.matches?(build, user)).to be_falsy
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/build/manual_spec.rb b/spec/lib/gitlab/ci/status/build/manual_spec.rb
new file mode 100644
index 00000000000..6386296f992
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/build/manual_spec.rb
@@ -0,0 +1,34 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Build::Manual do
+ let(:user) { create(:user) }
+
+ subject do
+ build = create(:ci_build, :manual)
+ described_class.new(Gitlab::Ci::Status::Core.new(build, user))
+ end
+
+ describe '#illustration' do
+ it { expect(subject.illustration).to include(:image, :size, :title, :content) }
+ end
+
+ describe '.matches?' do
+ subject {described_class.matches?(build, user) }
+
+ context 'when build is manual' do
+ let(:build) { create(:ci_build, :manual) }
+
+ it 'is a correct match' do
+ expect(subject).to be true
+ end
+ end
+
+ context 'when build is not manual' do
+ let(:build) { create(:ci_build) }
+
+ it 'does not match' do
+ expect(subject).to be false
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/build/pending_spec.rb b/spec/lib/gitlab/ci/status/build/pending_spec.rb
new file mode 100644
index 00000000000..4cf70828e53
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/build/pending_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Build::Pending do
+ let(:user) { create(:user) }
+
+ subject do
+ described_class.new(double('subject'))
+ end
+
+ describe '#illustration' do
+ it { expect(subject.illustration).to include(:image, :size, :title, :content) }
+ end
+
+ describe '.matches?' do
+ subject {described_class.matches?(build, user) }
+
+ context 'when build is pending' do
+ let(:build) { create(:ci_build, :pending) }
+
+ it 'is a correct match' do
+ expect(subject).to be true
+ end
+ end
+
+ context 'when build is not pending' do
+ let(:build) { create(:ci_build, :success) }
+
+ it 'does not match' do
+ expect(subject).to be false
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/build/play_spec.rb b/spec/lib/gitlab/ci/status/build/play_spec.rb
index 81d5f553fd1..f128c1d4ca4 100644
--- a/spec/lib/gitlab/ci/status/build/play_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/play_spec.rb
@@ -14,6 +14,22 @@ describe Gitlab::Ci::Status::Build::Play do
end
end
+ describe '#status_tooltip' do
+ it 'does not override status status_tooltip' do
+ expect(status).to receive(:status_tooltip)
+
+ subject.status_tooltip
+ end
+ end
+
+ describe '#badge_tooltip' do
+ it 'does not override status badge_tooltip' do
+ expect(status).to receive(:badge_tooltip)
+
+ subject.badge_tooltip
+ end
+ end
+
describe '#has_action?' do
context 'when user is allowed to update build' do
context 'when user is allowed to trigger protected action' do
@@ -53,6 +69,10 @@ describe Gitlab::Ci::Status::Build::Play do
it { expect(subject.action_title).to eq 'Play' }
end
+ describe '#action_button_title' do
+ it { expect(subject.action_button_title).to eq 'Trigger this manual action' }
+ end
+
describe '.matches?' do
subject { described_class.matches?(build, user) }
diff --git a/spec/lib/gitlab/ci/status/build/retried_spec.rb b/spec/lib/gitlab/ci/status/build/retried_spec.rb
new file mode 100644
index 00000000000..ee9acaf1c21
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/build/retried_spec.rb
@@ -0,0 +1,96 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Build::Retried do
+ let(:build) { create(:ci_build, :retried) }
+ let(:status) { double('core status') }
+ let(:user) { double('user') }
+
+ subject { described_class.new(status) }
+
+ describe '#text' do
+ it 'does not override status text' do
+ expect(status).to receive(:text)
+
+ subject.text
+ end
+ end
+
+ describe '#icon' do
+ it 'does not override status icon' do
+ expect(status).to receive(:icon)
+
+ subject.icon
+ end
+ end
+
+ describe '#group' do
+ it 'does not override status group' do
+ expect(status).to receive(:group)
+
+ subject.group
+ end
+ end
+
+ describe '#favicon' do
+ it 'does not override status label' do
+ expect(status).to receive(:favicon)
+
+ subject.favicon
+ end
+ end
+
+ describe '#label' do
+ it 'does not override status label' do
+ expect(status).to receive(:label)
+
+ subject.label
+ end
+ end
+
+ describe '#badge_tooltip' do
+ let(:user) { create(:user) }
+ let(:build) { create(:ci_build, :retried) }
+ let(:status) { Gitlab::Ci::Status::Success.new(build, user) }
+
+ it 'returns status' do
+ expect(status.badge_tooltip).to eq('pending')
+ end
+ end
+
+ describe '#status_tooltip' do
+ let(:user) { create(:user) }
+
+ context 'with a failed build' do
+ let(:build) { create(:ci_build, :failed, :retried) }
+ let(:failed_status) { Gitlab::Ci::Status::Failed.new(build, user) }
+ let(:status) { Gitlab::Ci::Status::Build::Failed.new(failed_status) }
+
+ it 'does override status_tooltip' do
+ expect(subject.status_tooltip).to eq 'failed (unknown failure) (retried)'
+ end
+ end
+
+ context 'with another build' do
+ let(:build) { create(:ci_build, :retried) }
+ let(:status) { Gitlab::Ci::Status::Success.new(build, user) }
+
+ it 'does override status_tooltip' do
+ expect(subject.status_tooltip).to eq 'passed (retried)'
+ end
+ end
+ end
+
+ describe '.matches?' do
+ subject { described_class.matches?(build, user) }
+
+ context 'with a retried build' do
+ it { is_expected.to be_truthy }
+ end
+
+ context 'with a build that has not been retried' do
+ let(:build) { create(:ci_build, :success) }
+
+ it { is_expected.to be_falsy }
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/build/retryable_spec.rb b/spec/lib/gitlab/ci/status/build/retryable_spec.rb
index 14d42e0d70f..84d98588f2d 100644
--- a/spec/lib/gitlab/ci/status/build/retryable_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/retryable_spec.rb
@@ -40,6 +40,24 @@ describe Gitlab::Ci::Status::Build::Retryable do
end
end
+ describe '#status_tooltip' do
+ it 'does not override status status_tooltip' do
+ expect(status).to receive(:status_tooltip)
+
+ subject.status_tooltip
+ end
+ end
+
+ describe '#badge_tooltip' do
+ let(:user) { create(:user) }
+ let(:build) { create(:ci_build) }
+ let(:status) { Gitlab::Ci::Status::Core.new(build, user) }
+
+ it 'does return status' do
+ expect(status.badge_tooltip).to eq('pending')
+ end
+ end
+
describe 'action details' do
let(:user) { create(:user) }
let(:build) { create(:ci_build) }
@@ -72,6 +90,10 @@ describe Gitlab::Ci::Status::Build::Retryable do
describe '#action_title' do
it { expect(subject.action_title).to eq 'Retry' }
end
+
+ describe '#action_button_title' do
+ it { expect(subject.action_button_title).to eq 'Retry this job' }
+ end
end
describe '.matches?' do
diff --git a/spec/lib/gitlab/ci/status/build/skipped_spec.rb b/spec/lib/gitlab/ci/status/build/skipped_spec.rb
new file mode 100644
index 00000000000..46f6933025a
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/build/skipped_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Build::Skipped do
+ let(:user) { create(:user) }
+
+ subject do
+ described_class.new(double('subject'))
+ end
+
+ describe '#illustration' do
+ it { expect(subject.illustration).to include(:image, :size, :title) }
+ end
+
+ describe '.matches?' do
+ subject {described_class.matches?(build, user) }
+
+ context 'when build is skipped' do
+ let(:build) { create(:ci_build, :skipped) }
+
+ it 'is a correct match' do
+ expect(subject).to be true
+ end
+ end
+
+ context 'when build is not skipped' do
+ let(:build) { create(:ci_build) }
+
+ it 'does not match' do
+ expect(subject).to be false
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/build/stop_spec.rb b/spec/lib/gitlab/ci/status/build/stop_spec.rb
index 18e250772f0..5b7534c96c1 100644
--- a/spec/lib/gitlab/ci/status/build/stop_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/stop_spec.rb
@@ -44,6 +44,10 @@ describe Gitlab::Ci::Status::Build::Stop do
describe '#action_title' do
it { expect(subject.action_title).to eq 'Stop' }
end
+
+ describe '#action_button_title' do
+ it { expect(subject.action_button_title).to eq 'Stop this environment' }
+ end
end
describe '.matches?' do
@@ -77,4 +81,24 @@ describe Gitlab::Ci::Status::Build::Stop do
end
end
end
+
+ describe '#status_tooltip' do
+ it 'does not override status status_tooltip' do
+ expect(status).to receive(:status_tooltip)
+
+ subject.status_tooltip
+ end
+ end
+
+ describe '#badge_tooltip' do
+ let(:user) { create(:user) }
+ let(:build) { create(:ci_build, :playable) }
+ let(:status) { Gitlab::Ci::Status::Core.new(build, user) }
+
+ it 'does not override status badge_tooltip' do
+ expect(status).to receive(:badge_tooltip)
+
+ subject.badge_tooltip
+ end
+ end
end
diff --git a/spec/lib/gitlab/ci/status/success_warning_spec.rb b/spec/lib/gitlab/ci/status/success_warning_spec.rb
index 4582354e739..6d05545d1d8 100644
--- a/spec/lib/gitlab/ci/status/success_warning_spec.rb
+++ b/spec/lib/gitlab/ci/status/success_warning_spec.rb
@@ -1,8 +1,10 @@
require 'spec_helper'
describe Gitlab::Ci::Status::SuccessWarning do
+ let(:status) { double('status') }
+
subject do
- described_class.new(double('status'))
+ described_class.new(status)
end
describe '#test' do
diff --git a/spec/lib/gitlab/ci/variables/collection/item_spec.rb b/spec/lib/gitlab/ci/variables/collection/item_spec.rb
index bf9208f1ff4..e79f0a7f257 100644
--- a/spec/lib/gitlab/ci/variables/collection/item_spec.rb
+++ b/spec/lib/gitlab/ci/variables/collection/item_spec.rb
@@ -5,6 +5,18 @@ describe Gitlab::Ci::Variables::Collection::Item do
{ key: 'VAR', value: 'something', public: true }
end
+ describe '.new' do
+ it 'raises error if unknown key i specified' do
+ expect { described_class.new(key: 'VAR', value: 'abc', files: true) }
+ .to raise_error ArgumentError, 'unknown keyword: files'
+ end
+
+ it 'raises error when required keywords are not specified' do
+ expect { described_class.new(key: 'VAR') }
+ .to raise_error ArgumentError, 'missing keyword: value'
+ end
+ end
+
describe '.fabricate' do
it 'supports using a hash' do
resource = described_class.fabricate(variable)
@@ -47,12 +59,25 @@ describe Gitlab::Ci::Variables::Collection::Item do
end
describe '#to_runner_variable' do
- it 'returns a runner-compatible hash representation' do
- runner_variable = described_class
- .new(**variable)
- .to_runner_variable
+ context 'when variable is not a file-related' do
+ it 'returns a runner-compatible hash representation' do
+ runner_variable = described_class
+ .new(**variable)
+ .to_runner_variable
- expect(runner_variable).to eq variable
+ expect(runner_variable).to eq variable
+ end
+ end
+
+ context 'when variable is file-related' do
+ it 'appends file description component' do
+ runner_variable = described_class
+ .new(key: 'VAR', value: 'value', file: true)
+ .to_runner_variable
+
+ expect(runner_variable)
+ .to eq(key: 'VAR', value: 'value', public: true, file: true)
+ end
end
end
end
diff --git a/spec/lib/gitlab/data_builder/note_spec.rb b/spec/lib/gitlab/data_builder/note_spec.rb
index aaa42566a4d..4f8412108ba 100644
--- a/spec/lib/gitlab/data_builder/note_spec.rb
+++ b/spec/lib/gitlab/data_builder/note_spec.rb
@@ -55,6 +55,14 @@ describe Gitlab::DataBuilder::Note do
.to be > issue.hook_attrs['updated_at']
end
+ context 'with confidential issue' do
+ let(:issue) { create(:issue, project: project, confidential: true) }
+
+ it 'sets event_type to confidential_note' do
+ expect(data[:event_type]).to eq('confidential_note')
+ end
+ end
+
include_examples 'project hook data'
include_examples 'deprecated repository hook data'
end
diff --git a/spec/lib/gitlab/database/sha_attribute_spec.rb b/spec/lib/gitlab/database/sha_attribute_spec.rb
index 62c1d37ea1c..778bfa2cc47 100644
--- a/spec/lib/gitlab/database/sha_attribute_spec.rb
+++ b/spec/lib/gitlab/database/sha_attribute_spec.rb
@@ -19,15 +19,15 @@ describe Gitlab::Database::ShaAttribute do
let(:attribute) { described_class.new }
- describe '#type_cast_from_database' do
+ describe '#deserialize' do
it 'converts the binary SHA to a String' do
- expect(attribute.type_cast_from_database(binary_from_db)).to eq(sha)
+ expect(attribute.deserialize(binary_from_db)).to eq(sha)
end
end
- describe '#type_cast_for_database' do
+ describe '#serialize' do
it 'converts a SHA String to binary data' do
- expect(attribute.type_cast_for_database(sha).to_s).to eq(binary_sha)
+ expect(attribute.serialize(sha).to_s).to eq(binary_sha)
end
end
end
diff --git a/spec/lib/gitlab/diff/highlight_spec.rb b/spec/lib/gitlab/diff/highlight_spec.rb
index 73d60c021c8..7c9e8c8d04e 100644
--- a/spec/lib/gitlab/diff/highlight_spec.rb
+++ b/spec/lib/gitlab/diff/highlight_spec.rb
@@ -79,6 +79,8 @@ describe Gitlab::Diff::Highlight do
end
it 'keeps the original rich line' do
+ allow(Gitlab::Sentry).to receive(:track_exception)
+
code = %q{+ raise RuntimeError, "System commands must be given as an array of strings"}
expect(subject[5].text).to eq(code)
@@ -86,12 +88,9 @@ describe Gitlab::Diff::Highlight do
end
it 'reports to Sentry if configured' do
- allow(Gitlab::Sentry).to receive(:enabled?).and_return(true)
+ expect(Gitlab::Sentry).to receive(:track_exception).and_call_original
- expect(Gitlab::Sentry).to receive(:context)
- expect(Raven).to receive(:capture_exception)
-
- subject
+ expect { subject }. to raise_exception(RangeError)
end
end
end
diff --git a/spec/lib/gitlab/email/handler_spec.rb b/spec/lib/gitlab/email/handler_spec.rb
index 650b01c4df4..cedbfcc0d18 100644
--- a/spec/lib/gitlab/email/handler_spec.rb
+++ b/spec/lib/gitlab/email/handler_spec.rb
@@ -14,4 +14,34 @@ describe Gitlab::Email::Handler do
expect(described_class.for('email', '')).to be_nil
end
end
+
+ describe 'regexps are set properly' do
+ let(:addresses) do
+ %W(sent_notification_key#{Gitlab::IncomingEmail::UNSUBSCRIBE_SUFFIX} sent_notification_key path/to/project+merge-request+user_email_token path/to/project+user_email_token)
+ end
+
+ it 'picks each handler at least once' do
+ matched_handlers = addresses.map do |address|
+ described_class.for('email', address).class
+ end
+
+ expect(matched_handlers.uniq).to match_array(ce_handlers)
+ end
+
+ it 'can pick exactly one handler for each address' do
+ addresses.each do |address|
+ matched_handlers = ce_handlers.select do |handler|
+ handler.new('email', address).can_handle?
+ end
+
+ expect(matched_handlers.count).to eq(1), "#{address} matches #{matched_handlers.count} handlers: #{matched_handlers}"
+ end
+ end
+ end
+
+ def ce_handlers
+ @ce_handlers ||= Gitlab::Email::Handler::HANDLERS.reject do |handler|
+ handler.name.start_with?('Gitlab::Email::Handler::EE::')
+ end
+ end
end
diff --git a/spec/lib/gitlab/git/attributes_parser_spec.rb b/spec/lib/gitlab/git/attributes_parser_spec.rb
index 323334e99a5..2d103123998 100644
--- a/spec/lib/gitlab/git/attributes_parser_spec.rb
+++ b/spec/lib/gitlab/git/attributes_parser_spec.rb
@@ -66,18 +66,6 @@ describe Gitlab::Git::AttributesParser, seed_helper: true do
end
end
- context 'when attributes data is a file handle' do
- subject do
- File.open(attributes_path, 'r') do |file_handle|
- described_class.new(file_handle)
- end
- end
-
- it 'returns the attributes as a Hash' do
- expect(subject.attributes('test.txt')).to eq({ 'text' => true })
- end
- end
-
context 'when attributes data is nil' do
let(:data) { nil }
diff --git a/spec/lib/gitlab/git/gitlab_projects_spec.rb b/spec/lib/gitlab/git/gitlab_projects_spec.rb
index dfccc15a4f3..8b715d717c1 100644
--- a/spec/lib/gitlab/git/gitlab_projects_spec.rb
+++ b/spec/lib/gitlab/git/gitlab_projects_spec.rb
@@ -16,7 +16,7 @@ describe Gitlab::Git::GitlabProjects do
let(:tmp_repos_path) { TestEnv.repos_path }
let(:repo_name) { project.disk_path + '.git' }
let(:tmp_repo_path) { File.join(tmp_repos_path, repo_name) }
- let(:gl_projects) { build_gitlab_projects(tmp_repos_path, repo_name) }
+ let(:gl_projects) { build_gitlab_projects(TestEnv::REPOS_STORAGE, repo_name) }
describe '#initialize' do
it { expect(gl_projects.shard_path).to eq(tmp_repos_path) }
@@ -223,11 +223,12 @@ describe Gitlab::Git::GitlabProjects do
end
describe '#fork_repository' do
+ let(:dest_repos) { TestEnv::REPOS_STORAGE }
let(:dest_repos_path) { tmp_repos_path }
let(:dest_repo_name) { File.join('@hashed', 'aa', 'bb', 'xyz.git') }
let(:dest_repo) { File.join(dest_repos_path, dest_repo_name) }
- subject { gl_projects.fork_repository(dest_repos_path, dest_repo_name) }
+ subject { gl_projects.fork_repository(dest_repos, dest_repo_name) }
before do
FileUtils.mkdir_p(dest_repos_path)
@@ -268,7 +269,12 @@ describe Gitlab::Git::GitlabProjects do
# that is not very straight-forward so I'm leaving this test here for now till
# https://gitlab.com/gitlab-org/gitlab-ce/issues/41393 is fixed.
context 'different storages' do
- let(:dest_repos_path) { File.join(File.dirname(tmp_repos_path), 'alternative') }
+ let(:dest_repos) { 'alternative' }
+ let(:dest_repos_path) { File.join(File.dirname(tmp_repos_path), dest_repos) }
+
+ before do
+ stub_storage_settings(dest_repos => { 'path' => dest_repos_path })
+ end
it 'forks the repo' do
is_expected.to be_truthy
diff --git a/spec/lib/gitlab/git/info_attributes_spec.rb b/spec/lib/gitlab/git/info_attributes_spec.rb
deleted file mode 100644
index ea84909c3e0..00000000000
--- a/spec/lib/gitlab/git/info_attributes_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Git::InfoAttributes, seed_helper: true do
- let(:path) do
- File.join(SEED_STORAGE_PATH, 'with-git-attributes.git')
- end
-
- subject { described_class.new(path) }
-
- describe '#attributes' do
- context 'using a path with attributes' do
- it 'returns the attributes as a Hash' do
- expect(subject.attributes('test.txt')).to eq({ 'text' => true })
- end
-
- it 'returns an empty Hash for a defined path without attributes' do
- expect(subject.attributes('bla/bla.txt')).to eq({})
- end
- end
- end
-
- describe '#parser' do
- it 'parses a file with entries' do
- expect(subject.patterns).to be_an_instance_of(Hash)
- expect(subject.patterns["/*.txt"]).to eq({ 'text' => true })
- end
-
- it 'does not parse anything when the attributes file does not exist' do
- expect(File).to receive(:exist?)
- .with(File.join(path, 'info/attributes'))
- .and_return(false)
-
- expect(subject.patterns).to eq({})
- end
-
- it 'does not parse attributes files with unsupported encoding' do
- path = File.join(SEED_STORAGE_PATH, 'with-invalid-git-attributes.git')
- subject = described_class.new(path)
-
- expect(subject.patterns).to eq({})
- end
- end
-end
diff --git a/spec/lib/gitlab/git/raw_diff_change_spec.rb b/spec/lib/gitlab/git/raw_diff_change_spec.rb
new file mode 100644
index 00000000000..eedde34534f
--- /dev/null
+++ b/spec/lib/gitlab/git/raw_diff_change_spec.rb
@@ -0,0 +1,66 @@
+require 'spec_helper'
+
+describe Gitlab::Git::RawDiffChange do
+ let(:raw_change) { }
+ let(:change) { described_class.new(raw_change) }
+
+ context 'bad input' do
+ let(:raw_change) { 'foo' }
+
+ it 'does not set most of the attrs' do
+ expect(change.blob_id).to eq('foo')
+ expect(change.operation).to eq(:unknown)
+ expect(change.old_path).to be_blank
+ expect(change.new_path).to be_blank
+ expect(change.blob_size).to be_blank
+ end
+ end
+
+ context 'adding a file' do
+ let(:raw_change) { '93e123ac8a3e6a0b600953d7598af629dec7b735 59 A bar/branch-test.txt' }
+
+ it 'initialize the proper attrs' do
+ expect(change.operation).to eq(:added)
+ expect(change.old_path).to be_blank
+ expect(change.new_path).to eq('bar/branch-test.txt')
+ expect(change.blob_id).to be_present
+ expect(change.blob_size).to be_present
+ end
+ end
+
+ context 'renaming a file' do
+ let(:raw_change) { "85bc2f9753afd5f4fc5d7c75f74f8d526f26b4f3 107 R060\tfiles/js/commit.js.coffee\tfiles/js/commit.coffee" }
+
+ it 'initialize the proper attrs' do
+ expect(change.operation).to eq(:renamed)
+ expect(change.old_path).to eq('files/js/commit.js.coffee')
+ expect(change.new_path).to eq('files/js/commit.coffee')
+ expect(change.blob_id).to be_present
+ expect(change.blob_size).to be_present
+ end
+ end
+
+ context 'modifying a file' do
+ let(:raw_change) { 'c60514b6d3d6bf4bec1030f70026e34dfbd69ad5 824 M README.md' }
+
+ it 'initialize the proper attrs' do
+ expect(change.operation).to eq(:modified)
+ expect(change.old_path).to eq('README.md')
+ expect(change.new_path).to eq('README.md')
+ expect(change.blob_id).to be_present
+ expect(change.blob_size).to be_present
+ end
+ end
+
+ context 'deleting a file' do
+ let(:raw_change) { '60d7a906c2fd9e4509aeb1187b98d0ea7ce827c9 15364 D files/.DS_Store' }
+
+ it 'initialize the proper attrs' do
+ expect(change.operation).to eq(:deleted)
+ expect(change.old_path).to eq('files/.DS_Store')
+ expect(change.new_path).to be_nil
+ expect(change.blob_id).to be_present
+ expect(change.blob_size).to be_present
+ end
+ end
+end
diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb
index 5cbe2808d0b..5acf40ea5ce 100644
--- a/spec/lib/gitlab/git/repository_spec.rb
+++ b/spec/lib/gitlab/git/repository_spec.rb
@@ -247,38 +247,44 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
it 'returns parameterised string for a ref containing slashes' do
- prefix = repository.archive_prefix('test/branch', 'SHA')
+ prefix = repository.archive_prefix('test/branch', 'SHA', append_sha: nil)
expect(prefix).to eq("#{project_name}-test-branch-SHA")
end
it 'returns correct string for a ref containing dots' do
- prefix = repository.archive_prefix('test.branch', 'SHA')
+ prefix = repository.archive_prefix('test.branch', 'SHA', append_sha: nil)
expect(prefix).to eq("#{project_name}-test.branch-SHA")
end
+
+ it 'returns string with sha when append_sha is false' do
+ prefix = repository.archive_prefix('test.branch', 'SHA', append_sha: false)
+
+ expect(prefix).to eq("#{project_name}-test.branch")
+ end
end
describe '#archive' do
- let(:metadata) { repository.archive_metadata('master', '/tmp') }
+ let(:metadata) { repository.archive_metadata('master', '/tmp', append_sha: true) }
it_should_behave_like 'archive check', '.tar.gz'
end
describe '#archive_zip' do
- let(:metadata) { repository.archive_metadata('master', '/tmp', 'zip') }
+ let(:metadata) { repository.archive_metadata('master', '/tmp', 'zip', append_sha: true) }
it_should_behave_like 'archive check', '.zip'
end
describe '#archive_bz2' do
- let(:metadata) { repository.archive_metadata('master', '/tmp', 'tbz2') }
+ let(:metadata) { repository.archive_metadata('master', '/tmp', 'tbz2', append_sha: true) }
it_should_behave_like 'archive check', '.tar.bz2'
end
describe '#archive_fallback' do
- let(:metadata) { repository.archive_metadata('master', '/tmp', 'madeup') }
+ let(:metadata) { repository.archive_metadata('master', '/tmp', 'madeup', append_sha: true) }
it_should_behave_like 'archive check', '.tar.gz'
end
@@ -464,9 +470,20 @@ describe Gitlab::Git::Repository, seed_helper: true do
FileUtils.rm_rf(heads_dir)
FileUtils.mkdir_p(heads_dir)
+ repository.expire_has_local_branches_cache
expect(repository.has_local_branches?).to eq(false)
end
end
+
+ context 'memoizes the value' do
+ it 'returns true' do
+ expect(repository).to receive(:uncached_has_local_branches?).once.and_call_original
+
+ 2.times do
+ expect(repository.has_local_branches?).to eq(true)
+ end
+ end
+ end
end
context 'with gitaly' do
@@ -1037,6 +1054,44 @@ describe Gitlab::Git::Repository, seed_helper: true do
it { is_expected.to eq(17) }
end
+ describe '#raw_changes_between' do
+ let(:old_rev) { }
+ let(:new_rev) { }
+ let(:changes) { repository.raw_changes_between(old_rev, new_rev) }
+
+ context 'initial commit' do
+ let(:old_rev) { Gitlab::Git::BLANK_SHA }
+ let(:new_rev) { '1a0b36b3cdad1d2ee32457c102a8c0b7056fa863' }
+
+ it 'returns the changes' do
+ expect(changes).to be_present
+ expect(changes.size).to eq(3)
+ end
+ end
+
+ context 'with an invalid rev' do
+ let(:old_rev) { 'foo' }
+ let(:new_rev) { 'bar' }
+
+ it 'returns an error' do
+ expect { changes }.to raise_error(Gitlab::Git::Repository::GitError)
+ end
+ end
+
+ context 'with valid revs' do
+ let(:old_rev) { 'fa1b1e6c004a68b7d8763b86455da9e6b23e36d6' }
+ let(:new_rev) { '4b4918a572fa86f9771e5ba40fbd48e1eb03e2c6' }
+
+ it 'returns the changes' do
+ expect(changes.size).to eq(9)
+ expect(changes.first.operation).to eq(:modified)
+ expect(changes.first.new_path).to eq('.gitmodules')
+ expect(changes.last.operation).to eq(:added)
+ expect(changes.last.new_path).to eq('files/lfs/picture-invalid.png')
+ end
+ end
+ end
+
describe '#merge_base' do
shared_examples '#merge_base' do
where(:from, :to, :result) do
@@ -2178,6 +2233,55 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
end
+ describe '#checksum' do
+ shared_examples 'calculating checksum' do
+ it 'calculates the checksum for non-empty repo' do
+ expect(repository.checksum).to eq '54f21be4c32c02f6788d72207fa03ad3bce725e4'
+ end
+
+ it 'returns 0000000000000000000000000000000000000000 for an empty repo' do
+ FileUtils.rm_rf(File.join(storage_path, 'empty-repo.git'))
+
+ system(git_env, *%W(#{Gitlab.config.git.bin_path} init --bare empty-repo.git),
+ chdir: storage_path,
+ out: '/dev/null',
+ err: '/dev/null')
+
+ empty_repo = described_class.new('default', 'empty-repo.git', '')
+
+ expect(empty_repo.checksum).to eq '0000000000000000000000000000000000000000'
+ end
+
+ it 'raises a no repository exception when there is no repo' do
+ broken_repo = described_class.new('default', 'a/path.git', '')
+
+ expect { broken_repo.checksum }.to raise_error(Gitlab::Git::Repository::NoRepository)
+ end
+ end
+
+ context 'when calculate_checksum Gitaly feature is enabled' do
+ it_behaves_like 'calculating checksum'
+ end
+
+ context 'when calculate_checksum Gitaly feature is disabled', :disable_gitaly do
+ it_behaves_like 'calculating checksum'
+
+ describe 'when storage is broken', :broken_storage do
+ it 'raises a storage exception when storage is not available' do
+ broken_repo = described_class.new('broken', 'a/path.git', '')
+
+ expect { broken_repo.rugged }.to raise_error(Gitlab::Git::Storage::Inaccessible)
+ end
+ end
+
+ it "raises a Gitlab::Git::Repository::Failure error if the `popen` call to git returns a non-zero exit code" do
+ allow(repository).to receive(:popen).and_return(['output', nil])
+
+ expect { repository.checksum }.to raise_error Gitlab::Git::Repository::ChecksumError
+ end
+ end
+ end
+
context 'gitlab_projects commands' do
let(:gitlab_projects) { repository.gitlab_projects }
let(:timeout) { Gitlab.config.gitlab_shell.git_timeout }
@@ -2251,6 +2355,39 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
end
+ describe '#clean_stale_repository_files' do
+ let(:worktree_path) { File.join(repository.path, 'worktrees', 'delete-me') }
+
+ it 'cleans up the files' do
+ repository.with_worktree(worktree_path, 'master', env: ENV) do
+ FileUtils.touch(worktree_path, mtime: Time.now - 8.hours)
+ # git rev-list --all will fail in git 2.16 if HEAD is pointing to a non-existent object,
+ # but the HEAD must be 40 characters long or git will ignore it.
+ File.write(File.join(worktree_path, 'HEAD'), Gitlab::Git::BLANK_SHA)
+
+ # git 2.16 fails with "fatal: bad object HEAD"
+ expect { repository.rev_list(including: :all) }.to raise_error(Gitlab::Git::Repository::GitError)
+
+ repository.clean_stale_repository_files
+
+ expect { repository.rev_list(including: :all) }.not_to raise_error
+ expect(File.exist?(worktree_path)).to be_falsey
+ end
+ end
+
+ it 'increments a counter upon an error' do
+ expect(repository.gitaly_repository_client).to receive(:cleanup).and_raise(Gitlab::Git::CommandError)
+
+ counter = double(:counter)
+
+ expect(counter).to receive(:increment)
+ expect(Gitlab::Metrics).to receive(:counter).with(:failed_repository_cleanup_total,
+ 'Number of failed repository cleanup events').and_return(counter)
+
+ repository.clean_stale_repository_files
+ end
+ end
+
describe '#delete_remote_branches' do
subject do
repository.delete_remote_branches('downstream-remote', ['master'])
diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb
index f8f09d29c73..6c625596605 100644
--- a/spec/lib/gitlab/git_access_spec.rb
+++ b/spec/lib/gitlab/git_access_spec.rb
@@ -10,12 +10,13 @@ describe Gitlab::GitAccess do
let(:protocol) { 'ssh' }
let(:authentication_abilities) { %i[read_project download_code push_code] }
let(:redirected_path) { nil }
+ let(:auth_result_type) { nil }
let(:access) do
described_class.new(actor, project,
protocol, authentication_abilities: authentication_abilities,
namespace_path: namespace_path, project_path: project_path,
- redirected_path: redirected_path)
+ redirected_path: redirected_path, auth_result_type: auth_result_type)
end
let(:changes) { '_any' }
@@ -45,6 +46,7 @@ describe Gitlab::GitAccess do
before do
disable_protocol('http')
+ project.add_master(user)
end
it 'blocks http push and pull' do
@@ -53,6 +55,26 @@ describe Gitlab::GitAccess do
expect { pull_access_check }.to raise_unauthorized('Git access over HTTP is not allowed')
end
end
+
+ context 'when request is made from CI' do
+ let(:auth_result_type) { :build }
+
+ it "doesn't block http pull" do
+ aggregate_failures do
+ expect { pull_access_check }.not_to raise_unauthorized('Git access over HTTP is not allowed')
+ end
+ end
+
+ context 'when legacy CI credentials are used' do
+ let(:auth_result_type) { :ci }
+
+ it "doesn't block http pull" do
+ aggregate_failures do
+ expect { pull_access_check }.not_to raise_unauthorized('Git access over HTTP is not allowed')
+ end
+ end
+ end
+ end
end
end
@@ -123,6 +145,33 @@ describe Gitlab::GitAccess do
expect { push_access_check }.to raise_unauthorized(described_class::ERROR_MESSAGES[:auth_upload])
end
end
+
+ context 'when actor is DeployToken' do
+ let(:actor) { create(:deploy_token, projects: [project]) }
+
+ context 'when DeployToken is active and belongs to project' do
+ it 'allows pull access' do
+ expect { pull_access_check }.not_to raise_error
+ end
+
+ it 'blocks the push' do
+ expect { push_access_check }.to raise_unauthorized(described_class::ERROR_MESSAGES[:upload])
+ end
+ end
+
+ context 'when DeployToken does not belong to project' do
+ let(:another_project) { create(:project) }
+ let(:actor) { create(:deploy_token, projects: [another_project]) }
+
+ it 'blocks pull access' do
+ expect { pull_access_check }.to raise_not_found
+ end
+
+ it 'blocks the push' do
+ expect { push_access_check }.to raise_not_found
+ end
+ end
+ end
end
context 'when actor is nil' do
@@ -572,6 +621,41 @@ describe Gitlab::GitAccess do
end
end
+ describe 'deploy token permissions' do
+ let(:deploy_token) { create(:deploy_token) }
+ let(:actor) { deploy_token }
+
+ context 'pull code' do
+ context 'when project is authorized' do
+ before do
+ deploy_token.projects << project
+ end
+
+ it { expect { pull_access_check }.not_to raise_error }
+ end
+
+ context 'when unauthorized' do
+ context 'from public project' do
+ let(:project) { create(:project, :public, :repository) }
+
+ it { expect { pull_access_check }.not_to raise_error }
+ end
+
+ context 'from internal project' do
+ let(:project) { create(:project, :internal, :repository) }
+
+ it { expect { pull_access_check }.to raise_not_found }
+ end
+
+ context 'from private project' do
+ let(:project) { create(:project, :private, :repository) }
+
+ it { expect { pull_access_check }.to raise_not_found }
+ end
+ end
+ end
+ end
+
describe 'build authentication_abilities permissions' do
let(:authentication_abilities) { build_authentication_abilities }
@@ -833,6 +917,20 @@ describe Gitlab::GitAccess do
admin: { push_protected_branch: false, push_all: false, merge_into_protected_branch: false }))
end
end
+
+ context 'when pushing to a project' do
+ let(:project) { create(:project, :public, :repository) }
+ let(:changes) { "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/heads/wow" }
+
+ before do
+ project.add_developer(user)
+ end
+
+ it 'cleans up the files' do
+ expect(project.repository).to receive(:clean_stale_repository_files).and_call_original
+ expect { push_access_check }.not_to raise_error
+ end
+ end
end
describe 'build authentication abilities' do
diff --git a/spec/lib/gitlab/gitaly_client/commit_service_spec.rb b/spec/lib/gitlab/gitaly_client/commit_service_spec.rb
index 9be3fa633a7..7951cbe7b1d 100644
--- a/spec/lib/gitlab/gitaly_client/commit_service_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/commit_service_spec.rb
@@ -33,7 +33,7 @@ describe Gitlab::GitalyClient::CommitService do
initial_commit = project.commit('1a0b36b3cdad1d2ee32457c102a8c0b7056fa863').raw
request = Gitaly::CommitDiffRequest.new(
repository: repository_message,
- left_commit_id: '4b825dc642cb6eb9a060e54bf8d69288fbee4904',
+ left_commit_id: Gitlab::Git::EMPTY_TREE_ID,
right_commit_id: initial_commit.id,
collapse_diffs: true,
enforce_limits: true,
@@ -77,7 +77,7 @@ describe Gitlab::GitalyClient::CommitService do
initial_commit = project.commit('1a0b36b3cdad1d2ee32457c102a8c0b7056fa863')
request = Gitaly::CommitDeltaRequest.new(
repository: repository_message,
- left_commit_id: '4b825dc642cb6eb9a060e54bf8d69288fbee4904',
+ left_commit_id: Gitlab::Git::EMPTY_TREE_ID,
right_commit_id: initial_commit.id
)
@@ -90,7 +90,7 @@ describe Gitlab::GitalyClient::CommitService do
describe '#between' do
let(:from) { 'master' }
- let(:to) { '4b825dc642cb6eb9a060e54bf8d69288fbee4904' }
+ let(:to) { Gitlab::Git::EMPTY_TREE_ID }
it 'sends an RPC request' do
request = Gitaly::CommitsBetweenRequest.new(
@@ -155,7 +155,7 @@ describe Gitlab::GitalyClient::CommitService do
end
describe '#find_commit' do
- let(:revision) { '4b825dc642cb6eb9a060e54bf8d69288fbee4904' }
+ let(:revision) { Gitlab::Git::EMPTY_TREE_ID }
it 'sends an RPC request' do
request = Gitaly::FindCommitRequest.new(
repository: repository_message, revision: revision
diff --git a/spec/lib/gitlab/gitaly_client/repository_service_spec.rb b/spec/lib/gitlab/gitaly_client/repository_service_spec.rb
index 1c41dbcb9ef..074323d47d2 100644
--- a/spec/lib/gitlab/gitaly_client/repository_service_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/repository_service_spec.rb
@@ -17,6 +17,16 @@ describe Gitlab::GitalyClient::RepositoryService do
end
end
+ describe '#cleanup' do
+ it 'sends a cleanup message' do
+ expect_any_instance_of(Gitaly::RepositoryService::Stub)
+ .to receive(:cleanup)
+ .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
+
+ client.cleanup
+ end
+ end
+
describe '#garbage_collect' do
it 'sends a garbage_collect message' do
expect_any_instance_of(Gitaly::RepositoryService::Stub)
@@ -74,6 +84,17 @@ describe Gitlab::GitalyClient::RepositoryService do
end
end
+ describe '#info_attributes' do
+ it 'reads the info attributes' do
+ expect_any_instance_of(Gitaly::RepositoryService::Stub)
+ .to receive(:get_info_attributes)
+ .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
+ .and_return([])
+
+ client.info_attributes
+ end
+ end
+
describe '#has_local_branches?' do
it 'sends a has_local_branches message' do
expect_any_instance_of(Gitaly::RepositoryService::Stub)
@@ -124,4 +145,15 @@ describe Gitlab::GitalyClient::RepositoryService do
client.squash_in_progress?(squash_id)
end
end
+
+ describe '#calculate_checksum' do
+ it 'sends a calculate_checksum message' do
+ expect_any_instance_of(Gitaly::RepositoryService::Stub)
+ .to receive(:calculate_checksum)
+ .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
+ .and_return(double(checksum: 0))
+
+ client.calculate_checksum
+ end
+ end
end
diff --git a/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb b/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb
index 1f0f1fdd7da..879b1d9fb0f 100644
--- a/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb
@@ -9,7 +9,7 @@ describe Gitlab::GithubImport::Importer::RepositoryImporter do
:project,
import_url: 'foo.git',
import_source: 'foo/bar',
- repository_storage_path: 'foo',
+ repository_storage: 'foo',
disk_path: 'foo',
repository: repository,
create_wiki: true
diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml
index b675d5dc031..897a5984782 100644
--- a/spec/lib/gitlab/import_export/all_models.yml
+++ b/spec/lib/gitlab/import_export/all_models.yml
@@ -145,6 +145,9 @@ pipeline_schedule:
- pipelines
pipeline_schedule_variables:
- pipeline_schedule
+deploy_tokens:
+- project_deploy_tokens
+- projects
deploy_keys:
- user
- deploy_keys_projects
@@ -281,6 +284,8 @@ project:
- project_badges
- source_of_merge_requests
- internal_ids
+- project_deploy_tokens
+- deploy_tokens
award_emoji:
- awardable
- user
diff --git a/spec/lib/gitlab/import_export/importer_spec.rb b/spec/lib/gitlab/import_export/importer_spec.rb
new file mode 100644
index 00000000000..991e354f499
--- /dev/null
+++ b/spec/lib/gitlab/import_export/importer_spec.rb
@@ -0,0 +1,104 @@
+require 'spec_helper'
+
+describe Gitlab::ImportExport::Importer do
+ let(:user) { create(:user) }
+ let(:test_path) { "#{Dir.tmpdir}/importer_spec" }
+ let(:shared) { project.import_export_shared }
+ let(:project) { create(:project, import_source: File.join(test_path, 'exported-project.gz')) }
+
+ subject(:importer) { described_class.new(project) }
+
+ before do
+ allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(test_path)
+ FileUtils.mkdir_p(shared.export_path)
+ FileUtils.cp(Rails.root.join('spec', 'fixtures', 'exported-project.gz'), test_path)
+ allow(subject).to receive(:remove_import_file)
+ end
+
+ after do
+ FileUtils.rm_rf(test_path)
+ end
+
+ describe '#execute' do
+ it 'succeeds' do
+ importer.execute
+
+ expect(shared.errors).to be_empty
+ end
+
+ it 'extracts the archive' do
+ expect(Gitlab::ImportExport::FileImporter).to receive(:import).and_call_original
+
+ importer.execute
+ end
+
+ it 'checks the version' do
+ expect(Gitlab::ImportExport::VersionChecker).to receive(:check!).and_call_original
+
+ importer.execute
+ end
+
+ context 'all restores are executed' do
+ [
+ Gitlab::ImportExport::AvatarRestorer,
+ Gitlab::ImportExport::RepoRestorer,
+ Gitlab::ImportExport::WikiRestorer,
+ Gitlab::ImportExport::UploadsRestorer,
+ Gitlab::ImportExport::LfsRestorer,
+ Gitlab::ImportExport::StatisticsRestorer
+ ].each do |restorer|
+ it "calls the #{restorer}" do
+ fake_restorer = double(restorer.to_s)
+
+ expect(fake_restorer).to receive(:restore).and_return(true).at_least(1)
+ expect(restorer).to receive(:new).and_return(fake_restorer).at_least(1)
+
+ importer.execute
+ end
+ end
+
+ it 'restores the ProjectTree' do
+ expect(Gitlab::ImportExport::ProjectTreeRestorer).to receive(:new).and_call_original
+
+ importer.execute
+ end
+ end
+
+ context 'when project successfully restored' do
+ let!(:existing_project) { create(:project, namespace: user.namespace) }
+ let(:project) { create(:project, namespace: user.namespace, name: 'whatever', path: 'whatever') }
+
+ before do
+ restorers = double
+
+ allow(subject).to receive(:import_file).and_return(true)
+ allow(subject).to receive(:check_version!).and_return(true)
+ allow(subject).to receive(:restorers).and_return(restorers)
+ allow(restorers).to receive(:all?).and_return(true)
+ allow(project).to receive(:import_data).and_return(double(data: { 'original_path' => existing_project.path }))
+ end
+
+ context 'when import_data' do
+ context 'has original_path' do
+ it 'overwrites existing project' do
+ expect_any_instance_of(::Projects::OverwriteProjectService).to receive(:execute).with(existing_project)
+
+ subject.execute
+ end
+ end
+
+ context 'has not original_path' do
+ before do
+ allow(project).to receive(:import_data).and_return(double(data: {}))
+ end
+
+ it 'does not call the overwrite service' do
+ expect_any_instance_of(::Projects::OverwriteProjectService).not_to receive(:execute).with(existing_project)
+
+ subject.execute
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/import_export/lfs_restorer_spec.rb b/spec/lib/gitlab/import_export/lfs_restorer_spec.rb
new file mode 100644
index 00000000000..70eeb9ee66b
--- /dev/null
+++ b/spec/lib/gitlab/import_export/lfs_restorer_spec.rb
@@ -0,0 +1,75 @@
+require 'spec_helper'
+
+describe Gitlab::ImportExport::LfsRestorer do
+ include UploadHelpers
+
+ let(:export_path) { "#{Dir.tmpdir}/lfs_object_restorer_spec" }
+ let(:project) { create(:project) }
+ let(:shared) { project.import_export_shared }
+ subject(:restorer) { described_class.new(project: project, shared: shared) }
+
+ before do
+ allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
+ FileUtils.mkdir_p(shared.export_path)
+ end
+
+ after do
+ FileUtils.rm_rf(shared.export_path)
+ end
+
+ describe '#restore' do
+ context 'when the archive contains lfs files' do
+ let(:dummy_lfs_file_path) { File.join(shared.export_path, 'lfs-objects', 'dummy') }
+
+ def create_lfs_object_with_content(content)
+ dummy_lfs_file = Tempfile.new('existing')
+ File.write(dummy_lfs_file.path, content)
+ size = dummy_lfs_file.size
+ oid = LfsObject.calculate_oid(dummy_lfs_file.path)
+ LfsObject.create!(oid: oid, size: size, file: dummy_lfs_file)
+ end
+
+ before do
+ FileUtils.mkdir_p(File.dirname(dummy_lfs_file_path))
+ File.write(dummy_lfs_file_path, 'not very large')
+ allow(restorer).to receive(:lfs_file_paths).and_return([dummy_lfs_file_path])
+ end
+
+ it 'creates an lfs object for the project' do
+ expect { restorer.restore }.to change { project.reload.lfs_objects.size }.by(1)
+ end
+
+ it 'assigns the file correctly' do
+ restorer.restore
+
+ expect(project.lfs_objects.first.file.read).to eq('not very large')
+ end
+
+ it 'links an existing LFS object if it existed' do
+ lfs_object = create_lfs_object_with_content('not very large')
+
+ restorer.restore
+
+ expect(project.lfs_objects).to include(lfs_object)
+ end
+
+ it 'succeeds' do
+ expect(restorer.restore).to be_truthy
+ expect(shared.errors).to be_empty
+ end
+
+ it 'stores the upload' do
+ expect_any_instance_of(LfsObjectUploader).to receive(:store!)
+
+ restorer.restore
+ end
+ end
+
+ context 'without any LFS-objects' do
+ it 'succeeds' do
+ expect(restorer.restore).to be_truthy
+ expect(shared.errors).to be_empty
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/import_export/lfs_saver_spec.rb b/spec/lib/gitlab/import_export/lfs_saver_spec.rb
new file mode 100644
index 00000000000..9b0e21deb2e
--- /dev/null
+++ b/spec/lib/gitlab/import_export/lfs_saver_spec.rb
@@ -0,0 +1,62 @@
+require 'spec_helper'
+
+describe Gitlab::ImportExport::LfsSaver do
+ let(:shared) { project.import_export_shared }
+ let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" }
+ let(:project) { create(:project) }
+
+ subject(:saver) { described_class.new(project: project, shared: shared) }
+
+ before do
+ allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
+ FileUtils.mkdir_p(shared.export_path)
+ end
+
+ after do
+ FileUtils.rm_rf(shared.export_path)
+ end
+
+ describe '#save' do
+ context 'when the project has LFS objects locally stored' do
+ let(:lfs_object) { create(:lfs_object, :with_file) }
+
+ before do
+ project.lfs_objects << lfs_object
+ end
+
+ it 'does not cause errors' do
+ saver.save
+
+ expect(shared.errors).to be_empty
+ end
+
+ it 'copies the file in the correct location when there is an lfs object' do
+ saver.save
+
+ expect(File).to exist("#{shared.export_path}/lfs-objects/#{lfs_object.oid}")
+ end
+ end
+
+ context 'when the LFS objects are stored in object storage' do
+ let(:lfs_object) { create(:lfs_object, :object_storage) }
+
+ before do
+ allow(LfsObjectUploader).to receive(:object_store_enabled?).and_return(true)
+ allow(lfs_object.file).to receive(:url).and_return('http://my-object-storage.local')
+ project.lfs_objects << lfs_object
+ end
+
+ it 'downloads the file to include in an archive' do
+ fake_uri = double
+ exported_file_path = "#{shared.export_path}/lfs-objects/#{lfs_object.oid}"
+
+ expect(fake_uri).to receive(:open).and_return(StringIO.new('LFS file content'))
+ expect(URI).to receive(:parse).with('http://my-object-storage.local').and_return(fake_uri)
+
+ saver.save
+
+ expect(File.read(exported_file_path)).to eq('LFS file content')
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/import_export/project.json b/spec/lib/gitlab/import_export/project.json
index 4a51777ba9b..6d63749296e 100644
--- a/spec/lib/gitlab/import_export/project.json
+++ b/spec/lib/gitlab/import_export/project.json
@@ -2,7 +2,6 @@
"description": "Nisi et repellendus ut enim quo accusamus vel magnam.",
"visibility_level": 10,
"archived": false,
- "description_html": "description",
"labels": [
{
"id": 2,
@@ -6181,12 +6180,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": null
- },
- "artifacts_metadata": {
- "url": null
- },
"erased_by_id": null,
"erased_at": null,
"type": "Ci::Build",
@@ -6219,12 +6212,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/72/p5_build_artifacts.zip"
- },
- "artifacts_metadata": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/72/p5_build_artifacts_metadata.gz"
- },
"erased_by_id": null,
"erased_at": null
}
@@ -6293,12 +6280,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/74/p5_build_artifacts.zip"
- },
- "artifacts_metadata": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/74/p5_build_artifacts_metadata.gz"
- },
"erased_by_id": null,
"erased_at": null
},
@@ -6328,12 +6309,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": null
- },
- "artifacts_metadata": {
- "url": null
- },
"erased_by_id": null,
"erased_at": null
}
@@ -6393,12 +6368,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/76/p5_build_artifacts.zip"
- },
- "artifacts_metadata": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/76/p5_build_artifacts_metadata.gz"
- },
"erased_by_id": null,
"erased_at": null
},
@@ -6428,12 +6397,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/75/p5_build_artifacts.zip"
- },
- "artifacts_metadata": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/75/p5_build_artifacts_metadata.gz"
- },
"erased_by_id": null,
"erased_at": null
}
@@ -6493,12 +6456,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/78/p5_build_artifacts.zip"
- },
- "artifacts_metadata": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/78/p5_build_artifacts_metadata.gz"
- },
"erased_by_id": null,
"erased_at": null
},
@@ -6528,12 +6485,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/77/p5_build_artifacts.zip"
- },
- "artifacts_metadata": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/77/p5_build_artifacts_metadata.gz"
- },
"erased_by_id": null,
"erased_at": null
}
@@ -6593,12 +6544,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": null
- },
- "artifacts_metadata": {
- "url": null
- },
"erased_by_id": null,
"erased_at": null
},
@@ -6628,12 +6573,6 @@
"user_id": null,
"target_url": null,
"description": null,
- "artifacts_file": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/80/p5_build_artifacts.zip"
- },
- "artifacts_metadata": {
- "url": "/Users/Test/Test/gitlab-development-kit/gitlab/shared/artifacts/2016_03/5/80/p5_build_artifacts_metadata.gz"
- },
"erased_by_id": null,
"erased_at": null
}
diff --git a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
index 8e25cd26c2f..13a8c9adcee 100644
--- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
@@ -46,10 +46,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
expect(Project.find_by_path('project').description).to eq('Nisi et repellendus ut enim quo accusamus vel magnam.')
end
- it 'has the project html description' do
- expect(Project.find_by_path('project').description_html).to eq('description')
- end
-
it 'has the same label associated to two issues' do
expect(ProjectLabel.find_by_title('test2').issues.count).to eq(2)
end
@@ -317,6 +313,24 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end
end
+ context 'when the project has overriden params in import data' do
+ it 'overwrites the params stored in the JSON' do
+ project.create_import_data(data: { override_params: { description: "Overridden" } })
+
+ restored_project_json
+
+ expect(project.description).to eq("Overridden")
+ end
+
+ it 'does not allow setting params that are excluded from import_export settings' do
+ project.create_import_data(data: { override_params: { lfs_enabled: true } })
+
+ restored_project_json
+
+ expect(project.lfs_enabled).to be_nil
+ end
+ end
+
context 'with a project that has a group' do
let!(:project) do
create(:project,
diff --git a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
index 0d20a551e2a..2b8a11ce8f9 100644
--- a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
@@ -245,10 +245,6 @@ describe Gitlab::ImportExport::ProjectTreeSaver do
end
context 'project attributes' do
- it 'contains the html description' do
- expect(saved_project_json).to include("description_html" => 'description')
- end
-
it 'does not contain the runners token' do
expect(saved_project_json).not_to include("runners_token" => 'token')
end
@@ -274,7 +270,6 @@ describe Gitlab::ImportExport::ProjectTreeSaver do
releases: [release],
group: group
)
- project.update_column(:description_html, 'description')
project_label = create(:label, project: project)
group_label = create(:group_label, group: group)
create(:label_link, label: project_label, target: issue)
diff --git a/spec/lib/gitlab/import_export/safe_model_attributes.yml b/spec/lib/gitlab/import_export/safe_model_attributes.yml
index f949a23ffbb..f84a777a27f 100644
--- a/spec/lib/gitlab/import_export/safe_model_attributes.yml
+++ b/spec/lib/gitlab/import_export/safe_model_attributes.yml
@@ -390,6 +390,7 @@ Service:
- default
- wiki_page_events
- confidential_issues_events
+- confidential_note_events
ProjectHook:
- id
- url
@@ -410,6 +411,7 @@ ProjectHook:
- token
- group_id
- confidential_issues_events
+- confidential_note_events
- repository_update_events
ProtectedBranch:
- id
diff --git a/spec/lib/gitlab/performance_bar_spec.rb b/spec/lib/gitlab/performance_bar_spec.rb
index b8a2267f1a4..f480376acb4 100644
--- a/spec/lib/gitlab/performance_bar_spec.rb
+++ b/spec/lib/gitlab/performance_bar_spec.rb
@@ -25,6 +25,12 @@ describe Gitlab::PerformanceBar do
expect(described_class.enabled?(nil)).to be_falsy
end
+ it 'returns true when given user is an admin' do
+ user = build_stubbed(:user, :admin)
+
+ expect(described_class.enabled?(user)).to be_truthy
+ end
+
it 'returns false when allowed_group_id is nil' do
expect(described_class).to receive(:allowed_group_id).and_return(nil)
diff --git a/spec/lib/gitlab/sentry_spec.rb b/spec/lib/gitlab/sentry_spec.rb
index 8c211d1c63f..499757da061 100644
--- a/spec/lib/gitlab/sentry_spec.rb
+++ b/spec/lib/gitlab/sentry_spec.rb
@@ -7,7 +7,49 @@ describe Gitlab::Sentry do
described_class.context(nil)
- expect(Raven.tags_context[:locale]).to eq(I18n.locale.to_s)
+ expect(Raven.tags_context[:locale].to_s).to eq(I18n.locale.to_s)
+ end
+ end
+
+ describe '.track_exception' do
+ let(:exception) { RuntimeError.new('boom') }
+
+ before do
+ allow(described_class).to receive(:enabled?).and_return(true)
+ end
+
+ it 'raises the exception if it should' do
+ expect(described_class).to receive(:should_raise?).and_return(true)
+ expect { described_class.track_exception(exception) }
+ .to raise_error(RuntimeError)
+ end
+
+ context 'when exceptions should not be raised' do
+ before do
+ allow(described_class).to receive(:should_raise?).and_return(false)
+ end
+
+ it 'logs the exception with all attributes passed' do
+ expected_extras = {
+ some_other_info: 'info',
+ issue_url: 'http://gitlab.com/gitlab-org/gitlab-ce/issues/1'
+ }
+
+ expect(Raven).to receive(:capture_exception)
+ .with(exception, extra: a_hash_including(expected_extras))
+
+ described_class.track_exception(
+ exception,
+ issue_url: 'http://gitlab.com/gitlab-org/gitlab-ce/issues/1',
+ extra: { some_other_info: 'info' }
+ )
+ end
+
+ it 'sets the context' do
+ expect(described_class).to receive(:context)
+
+ described_class.track_exception(exception)
+ end
end
end
end
diff --git a/spec/lib/gitlab/shell_spec.rb b/spec/lib/gitlab/shell_spec.rb
index ea5ce58e34b..7ff2c0639ec 100644
--- a/spec/lib/gitlab/shell_spec.rb
+++ b/spec/lib/gitlab/shell_spec.rb
@@ -14,7 +14,7 @@ describe Gitlab::Shell do
allow(Project).to receive(:find).and_return(project)
allow(gitlab_shell).to receive(:gitlab_projects)
- .with(project.repository_storage_path, project.disk_path + '.git')
+ .with(project.repository_storage, project.disk_path + '.git')
.and_return(gitlab_projects)
end
@@ -487,21 +487,21 @@ describe Gitlab::Shell do
describe '#fork_repository' do
subject do
gitlab_shell.fork_repository(
- project.repository_storage_path,
+ project.repository_storage,
project.disk_path,
- 'new/storage',
+ 'nfs-file05',
'fork/path'
)
end
it 'returns true when the command succeeds' do
- expect(gitlab_projects).to receive(:fork_repository).with('new/storage', 'fork/path.git') { true }
+ expect(gitlab_projects).to receive(:fork_repository).with('nfs-file05', 'fork/path.git') { true }
is_expected.to be_truthy
end
it 'return false when the command fails' do
- expect(gitlab_projects).to receive(:fork_repository).with('new/storage', 'fork/path.git') { false }
+ expect(gitlab_projects).to receive(:fork_repository).with('nfs-file05', 'fork/path.git') { false }
is_expected.to be_falsy
end
@@ -661,7 +661,7 @@ describe Gitlab::Shell do
it 'returns true when the command succeeds' do
expect(gitlab_projects).to receive(:import_project).with(import_url, timeout) { true }
- result = gitlab_shell.import_repository(project.repository_storage_path, project.disk_path, import_url)
+ result = gitlab_shell.import_repository(project.repository_storage, project.disk_path, import_url)
expect(result).to be_truthy
end
@@ -671,7 +671,7 @@ describe Gitlab::Shell do
expect(gitlab_projects).to receive(:import_project) { false }
expect do
- gitlab_shell.import_repository(project.repository_storage_path, project.disk_path, import_url)
+ gitlab_shell.import_repository(project.repository_storage, project.disk_path, import_url)
end.to raise_error(Gitlab::Shell::Error, "error")
end
end
diff --git a/spec/lib/gitlab/sidekiq_logging/json_formatter_spec.rb b/spec/lib/gitlab/sidekiq_logging/json_formatter_spec.rb
new file mode 100644
index 00000000000..fed9aeba30c
--- /dev/null
+++ b/spec/lib/gitlab/sidekiq_logging/json_formatter_spec.rb
@@ -0,0 +1,31 @@
+require 'spec_helper'
+
+describe Gitlab::SidekiqLogging::JSONFormatter do
+ let(:hash_input) { { foo: 1, bar: 'test' } }
+ let(:message) { 'This is a test' }
+ let(:timestamp) { Time.now }
+
+ it 'wraps a Hash' do
+ result = subject.call('INFO', timestamp, 'my program', hash_input)
+
+ data = JSON.parse(result)
+ expected_output = hash_input.stringify_keys
+ expected_output['severity'] = 'INFO'
+ expected_output['time'] = timestamp.utc.iso8601(3)
+
+ expect(data).to eq(expected_output)
+ end
+
+ it 'wraps a String' do
+ result = subject.call('DEBUG', timestamp, 'my string', message)
+
+ data = JSON.parse(result)
+ expected_output = {
+ severity: 'DEBUG',
+ time: timestamp.utc.iso8601(3),
+ message: message
+ }
+
+ expect(data).to eq(expected_output.stringify_keys)
+ end
+end
diff --git a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
new file mode 100644
index 00000000000..2421b1e5a1a
--- /dev/null
+++ b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
@@ -0,0 +1,101 @@
+require 'spec_helper'
+
+describe Gitlab::SidekiqLogging::StructuredLogger do
+ describe '#call' do
+ let(:timestamp) { Time.new('2018-01-01 12:00:00').utc }
+ let(:job) do
+ {
+ "class" => "TestWorker",
+ "args" => [1234, 'hello'],
+ "retry" => false,
+ "queue" => "cronjob:test_queue",
+ "queue_namespace" => "cronjob",
+ "jid" => "da883554ee4fe414012f5f42",
+ "created_at" => timestamp.to_f,
+ "enqueued_at" => timestamp.to_f
+ }
+ end
+ let(:logger) { double() }
+ let(:start_payload) do
+ job.merge(
+ 'message' => 'TestWorker JID-da883554ee4fe414012f5f42: start',
+ 'job_status' => 'start',
+ 'pid' => Process.pid,
+ 'created_at' => timestamp.iso8601(3),
+ 'enqueued_at' => timestamp.iso8601(3)
+ )
+ end
+ let(:end_payload) do
+ start_payload.merge(
+ 'message' => 'TestWorker JID-da883554ee4fe414012f5f42: done: 0.0 sec',
+ 'job_status' => 'done',
+ 'duration' => 0.0,
+ "completed_at" => timestamp.iso8601(3)
+ )
+ end
+ let(:exception_payload) do
+ end_payload.merge(
+ 'message' => 'TestWorker JID-da883554ee4fe414012f5f42: fail: 0.0 sec',
+ 'job_status' => 'fail',
+ 'error' => ArgumentError,
+ 'error_message' => 'some exception'
+ )
+ end
+
+ before do
+ allow(Sidekiq).to receive(:logger).and_return(logger)
+
+ allow(subject).to receive(:current_time).and_return(timestamp.to_f)
+ end
+
+ subject { described_class.new }
+
+ context 'with SIDEKIQ_LOG_ARGUMENTS enabled' do
+ before do
+ stub_env('SIDEKIQ_LOG_ARGUMENTS', '1')
+ end
+
+ it 'logs start and end of job' do
+ Timecop.freeze(timestamp) do
+ expect(logger).to receive(:info).with(start_payload).ordered
+ expect(logger).to receive(:info).with(end_payload).ordered
+ expect(subject).to receive(:log_job_start).and_call_original
+ expect(subject).to receive(:log_job_done).and_call_original
+
+ subject.call(job, 'test_queue') { }
+ end
+ end
+
+ it 'logs an exception in job' do
+ Timecop.freeze(timestamp) do
+ expect(logger).to receive(:info).with(start_payload)
+ # This excludes the exception_backtrace
+ expect(logger).to receive(:warn).with(hash_including(exception_payload))
+ expect(subject).to receive(:log_job_start).and_call_original
+ expect(subject).to receive(:log_job_done).and_call_original
+
+ expect do
+ subject.call(job, 'test_queue') do
+ raise ArgumentError, 'some exception'
+ end
+ end.to raise_error(ArgumentError)
+ end
+ end
+ end
+
+ context 'with SIDEKIQ_LOG_ARGUMENTS disabled' do
+ it 'logs start and end of job' do
+ Timecop.freeze(timestamp) do
+ start_payload.delete('args')
+
+ expect(logger).to receive(:info).with(start_payload).ordered
+ expect(logger).to receive(:info).with(end_payload).ordered
+ expect(subject).to receive(:log_job_start).and_call_original
+ expect(subject).to receive(:log_job_done).and_call_original
+
+ subject.call(job, 'test_queue') { }
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/utils_spec.rb b/spec/lib/gitlab/utils_spec.rb
index 71a743495a2..4ba99009855 100644
--- a/spec/lib/gitlab/utils_spec.rb
+++ b/spec/lib/gitlab/utils_spec.rb
@@ -1,7 +1,8 @@
require 'spec_helper'
describe Gitlab::Utils do
- delegate :to_boolean, :boolean_to_yes_no, :slugify, :random_string, :which, :ensure_array_from_string, to: :described_class
+ delegate :to_boolean, :boolean_to_yes_no, :slugify, :random_string, :which, :ensure_array_from_string,
+ :bytes_to_megabytes, to: :described_class
describe '.slugify' do
{
@@ -97,4 +98,12 @@ describe Gitlab::Utils do
expect(ensure_array_from_string(str)).to eq(%w[seven eight 9 10])
end
end
+
+ describe '.bytes_to_megabytes' do
+ it 'converts bytes to megabytes' do
+ bytes = 1.megabyte
+
+ expect(bytes_to_megabytes(bytes)).to eq(1)
+ end
+ end
end
diff --git a/spec/lib/gitlab/workhorse_spec.rb b/spec/lib/gitlab/workhorse_spec.rb
index 2b3ffb2d7c0..d64ea72e346 100644
--- a/spec/lib/gitlab/workhorse_spec.rb
+++ b/spec/lib/gitlab/workhorse_spec.rb
@@ -16,7 +16,7 @@ describe Gitlab::Workhorse do
let(:ref) { 'master' }
let(:format) { 'zip' }
let(:storage_path) { Gitlab.config.gitlab.repository_downloads_path }
- let(:base_params) { repository.archive_metadata(ref, storage_path, format) }
+ let(:base_params) { repository.archive_metadata(ref, storage_path, format, append_sha: nil) }
let(:gitaly_params) do
base_params.merge(
'GitalyServer' => {
@@ -29,7 +29,7 @@ describe Gitlab::Workhorse do
let(:cache_disabled) { false }
subject do
- described_class.send_git_archive(repository, ref: ref, format: format)
+ described_class.send_git_archive(repository, ref: ref, format: format, append_sha: nil)
end
before do
diff --git a/spec/lib/gitlab_spec.rb b/spec/lib/gitlab_spec.rb
index f97136f0191..bd443a5d9e7 100644
--- a/spec/lib/gitlab_spec.rb
+++ b/spec/lib/gitlab_spec.rb
@@ -14,6 +14,12 @@ describe Gitlab do
expect(described_class.com?).to eq true
end
+ it 'is true when on other gitlab subdomain' do
+ stub_config_setting(url: 'https://example.gitlab.com')
+
+ expect(described_class.com?).to eq true
+ end
+
it 'is false when not on GitLab.com' do
stub_config_setting(url: 'http://example.com')
diff --git a/spec/lib/rspec_flaky/config_spec.rb b/spec/lib/rspec_flaky/config_spec.rb
index 83556787e85..4a71b1feebd 100644
--- a/spec/lib/rspec_flaky/config_spec.rb
+++ b/spec/lib/rspec_flaky/config_spec.rb
@@ -16,23 +16,25 @@ describe RspecFlaky::Config, :aggregate_failures do
end
end
- context "when ENV['FLAKY_RSPEC_GENERATE_REPORT'] is set to 'false'" do
- before do
- stub_env('FLAKY_RSPEC_GENERATE_REPORT', 'false')
+ context "when ENV['FLAKY_RSPEC_GENERATE_REPORT'] is set" do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:env_value, :result) do
+ '1' | true
+ 'true' | true
+ 'foo' | false
+ '0' | false
+ 'false' | false
end
- it 'returns false' do
- expect(described_class).not_to be_generate_report
- end
- end
+ with_them do
+ before do
+ stub_env('FLAKY_RSPEC_GENERATE_REPORT', env_value)
+ end
- context "when ENV['FLAKY_RSPEC_GENERATE_REPORT'] is set to 'true'" do
- before do
- stub_env('FLAKY_RSPEC_GENERATE_REPORT', 'true')
- end
-
- it 'returns true' do
- expect(described_class).to be_generate_report
+ it 'returns false' do
+ expect(described_class.generate_report?).to be(result)
+ end
end
end
end
diff --git a/spec/lib/rspec_flaky/flaky_examples_collection_spec.rb b/spec/lib/rspec_flaky/flaky_examples_collection_spec.rb
index 06a8ba0d02e..6731a27ed17 100644
--- a/spec/lib/rspec_flaky/flaky_examples_collection_spec.rb
+++ b/spec/lib/rspec_flaky/flaky_examples_collection_spec.rb
@@ -24,14 +24,6 @@ describe RspecFlaky::FlakyExamplesCollection, :aggregate_failures do
}
end
- describe '.from_json' do
- it 'accepts a JSON' do
- collection = described_class.from_json(JSON.pretty_generate(collection_hash))
-
- expect(collection.to_report).to eq(described_class.new(collection_hash).to_report)
- end
- end
-
describe '#initialize' do
it 'accepts no argument' do
expect { described_class.new }.not_to raise_error
@@ -46,11 +38,11 @@ describe RspecFlaky::FlakyExamplesCollection, :aggregate_failures do
end
end
- describe '#to_report' do
+ describe '#to_h' do
it 'calls #to_h on the values' do
collection = described_class.new(collection_hash)
- expect(collection.to_report).to eq(collection_report)
+ expect(collection.to_h).to eq(collection_report)
end
end
@@ -61,7 +53,7 @@ describe RspecFlaky::FlakyExamplesCollection, :aggregate_failures do
a: { example_id: 'spec/foo/bar_spec.rb:2' },
c: { example_id: 'spec/bar/baz_spec.rb:4' })
- expect((collection2 - collection1).to_report).to eq(
+ expect((collection2 - collection1).to_h).to eq(
c: {
example_id: 'spec/bar/baz_spec.rb:4',
first_flaky_at: nil,
diff --git a/spec/lib/rspec_flaky/listener_spec.rb b/spec/lib/rspec_flaky/listener_spec.rb
index bfb7648b486..ef085445081 100644
--- a/spec/lib/rspec_flaky/listener_spec.rb
+++ b/spec/lib/rspec_flaky/listener_spec.rb
@@ -4,7 +4,7 @@ describe RspecFlaky::Listener, :aggregate_failures do
let(:already_flaky_example_uid) { '6e869794f4cfd2badd93eb68719371d1' }
let(:suite_flaky_example_report) do
{
- already_flaky_example_uid => {
+ "#{already_flaky_example_uid}": {
example_id: 'spec/foo/bar_spec.rb:2',
file: 'spec/foo/bar_spec.rb',
line: 2,
@@ -55,8 +55,7 @@ describe RspecFlaky::Listener, :aggregate_failures do
it 'returns a valid Listener instance' do
listener = described_class.new
- expect(listener.to_report(listener.suite_flaky_examples))
- .to eq(expected_suite_flaky_examples)
+ expect(listener.suite_flaky_examples.to_h).to eq(expected_suite_flaky_examples)
expect(listener.flaky_examples).to eq({})
end
end
@@ -65,25 +64,35 @@ describe RspecFlaky::Listener, :aggregate_failures do
it_behaves_like 'a valid Listener instance'
end
- context 'when a report file exists and set by SUITE_FLAKY_RSPEC_REPORT_PATH' do
- let(:report_file) do
- Tempfile.new(%w[rspec_flaky_report .json]).tap do |f|
- f.write(JSON.pretty_generate(suite_flaky_example_report))
- f.rewind
+ context 'when SUITE_FLAKY_RSPEC_REPORT_PATH is set' do
+ let(:report_file_path) { 'foo/report.json' }
+
+ before do
+ stub_env('SUITE_FLAKY_RSPEC_REPORT_PATH', report_file_path)
+ end
+
+ context 'and report file exists' do
+ before do
+ expect(File).to receive(:exist?).with(report_file_path).and_return(true)
+ end
+
+ it 'delegates the load to RspecFlaky::Report' do
+ report = RspecFlaky::Report.new(RspecFlaky::FlakyExamplesCollection.new(suite_flaky_example_report))
+
+ expect(RspecFlaky::Report).to receive(:load).with(report_file_path).and_return(report)
+ expect(described_class.new.suite_flaky_examples.to_h).to eq(report.flaky_examples.to_h)
end
end
- before do
- stub_env('SUITE_FLAKY_RSPEC_REPORT_PATH', report_file.path)
- end
+ context 'and report file does not exist' do
+ before do
+ expect(File).to receive(:exist?).with(report_file_path).and_return(false)
+ end
- after do
- report_file.close
- report_file.unlink
- end
-
- it_behaves_like 'a valid Listener instance' do
- let(:expected_suite_flaky_examples) { suite_flaky_example_report }
+ it 'return an empty hash' do
+ expect(RspecFlaky::Report).not_to receive(:load)
+ expect(described_class.new.suite_flaky_examples.to_h).to eq({})
+ end
end
end
end
@@ -186,74 +195,21 @@ describe RspecFlaky::Listener, :aggregate_failures do
let(:notification_already_flaky_rspec_example) { double(example: already_flaky_rspec_example) }
context 'when a report file path is set by FLAKY_RSPEC_REPORT_PATH' do
- let(:report_file_path) { Rails.root.join('tmp', 'rspec_flaky_report.json') }
- let(:new_report_file_path) { Rails.root.join('tmp', 'rspec_flaky_new_report.json') }
+ it 'delegates the writes to RspecFlaky::Report' do
+ listener.example_passed(notification_new_flaky_rspec_example)
+ listener.example_passed(notification_already_flaky_rspec_example)
- before do
- stub_env('FLAKY_RSPEC_REPORT_PATH', report_file_path)
- stub_env('NEW_FLAKY_RSPEC_REPORT_PATH', new_report_file_path)
- FileUtils.rm(report_file_path) if File.exist?(report_file_path)
- FileUtils.rm(new_report_file_path) if File.exist?(new_report_file_path)
+ report1 = double
+ report2 = double
+
+ expect(RspecFlaky::Report).to receive(:new).with(listener.flaky_examples).and_return(report1)
+ expect(report1).to receive(:write).with(RspecFlaky::Config.flaky_examples_report_path)
+
+ expect(RspecFlaky::Report).to receive(:new).with(listener.flaky_examples - listener.suite_flaky_examples).and_return(report2)
+ expect(report2).to receive(:write).with(RspecFlaky::Config.new_flaky_examples_report_path)
+
+ listener.dump_summary(nil)
end
-
- after do
- FileUtils.rm(report_file_path) if File.exist?(report_file_path)
- FileUtils.rm(new_report_file_path) if File.exist?(new_report_file_path)
- end
-
- context 'when FLAKY_RSPEC_GENERATE_REPORT == "false"' do
- before do
- stub_env('FLAKY_RSPEC_GENERATE_REPORT', 'false')
- end
-
- it 'does not write any report file' do
- listener.example_passed(notification_new_flaky_rspec_example)
-
- listener.dump_summary(nil)
-
- expect(File.exist?(report_file_path)).to be(false)
- expect(File.exist?(new_report_file_path)).to be(false)
- end
- end
-
- context 'when FLAKY_RSPEC_GENERATE_REPORT == "true"' do
- before do
- stub_env('FLAKY_RSPEC_GENERATE_REPORT', 'true')
- end
-
- around do |example|
- Timecop.freeze { example.run }
- end
-
- it 'writes the report files' do
- listener.example_passed(notification_new_flaky_rspec_example)
- listener.example_passed(notification_already_flaky_rspec_example)
-
- listener.dump_summary(nil)
-
- expect(File.exist?(report_file_path)).to be(true)
- expect(File.exist?(new_report_file_path)).to be(true)
-
- expect(File.read(report_file_path))
- .to eq(JSON.pretty_generate(listener.to_report(listener.flaky_examples)))
-
- new_example = RspecFlaky::Example.new(notification_new_flaky_rspec_example)
- new_flaky_example = RspecFlaky::FlakyExample.new(new_example)
- new_flaky_example.update_flakiness!
-
- expect(File.read(new_report_file_path))
- .to eq(JSON.pretty_generate(listener.to_report(new_example.uid => new_flaky_example)))
- end
- end
- end
- end
-
- describe '#to_report' do
- let(:listener) { described_class.new(suite_flaky_example_report.to_json) }
-
- it 'transforms the internal hash to a JSON-ready hash' do
- expect(listener.to_report(already_flaky_example_uid => already_flaky_example))
- .to match(hash_including(suite_flaky_example_report))
end
end
end
diff --git a/spec/lib/rspec_flaky/report_spec.rb b/spec/lib/rspec_flaky/report_spec.rb
new file mode 100644
index 00000000000..7d57d99f7e5
--- /dev/null
+++ b/spec/lib/rspec_flaky/report_spec.rb
@@ -0,0 +1,125 @@
+require 'spec_helper'
+
+describe RspecFlaky::Report, :aggregate_failures do
+ let(:a_hundred_days) { 3600 * 24 * 100 }
+ let(:collection_hash) do
+ {
+ a: { example_id: 'spec/foo/bar_spec.rb:2' },
+ b: { example_id: 'spec/foo/baz_spec.rb:3', first_flaky_at: (Time.now - a_hundred_days).to_s, last_flaky_at: (Time.now - a_hundred_days).to_s }
+ }
+ end
+ let(:suite_flaky_example_report) do
+ {
+ '6e869794f4cfd2badd93eb68719371d1': {
+ example_id: 'spec/foo/bar_spec.rb:2',
+ file: 'spec/foo/bar_spec.rb',
+ line: 2,
+ description: 'hello world',
+ first_flaky_at: 1234,
+ last_flaky_at: 4321,
+ last_attempts_count: 3,
+ flaky_reports: 1,
+ last_flaky_job: nil
+ }
+ }
+ end
+ let(:flaky_examples) { RspecFlaky::FlakyExamplesCollection.new(collection_hash) }
+ let(:report) { described_class.new(flaky_examples) }
+
+ describe '.load' do
+ let!(:report_file) do
+ Tempfile.new(%w[rspec_flaky_report .json]).tap do |f|
+ f.write(JSON.pretty_generate(suite_flaky_example_report))
+ f.rewind
+ end
+ end
+
+ after do
+ report_file.close
+ report_file.unlink
+ end
+
+ it 'loads the report file' do
+ expect(described_class.load(report_file.path).flaky_examples.to_h).to eq(suite_flaky_example_report)
+ end
+ end
+
+ describe '.load_json' do
+ let(:report_json) do
+ JSON.pretty_generate(suite_flaky_example_report)
+ end
+
+ it 'loads the report file' do
+ expect(described_class.load_json(report_json).flaky_examples.to_h).to eq(suite_flaky_example_report)
+ end
+ end
+
+ describe '#initialize' do
+ it 'accepts a RspecFlaky::FlakyExamplesCollection' do
+ expect { report }.not_to raise_error
+ end
+
+ it 'does not accept anything else' do
+ expect { described_class.new([1, 2, 3]) }.to raise_error(ArgumentError, "`flaky_examples` must be a RspecFlaky::FlakyExamplesCollection, Array given!")
+ end
+ end
+
+ it 'delegates to #flaky_examples using SimpleDelegator' do
+ expect(report.__getobj__).to eq(flaky_examples)
+ end
+
+ describe '#write' do
+ let(:report_file_path) { Rails.root.join('tmp', 'rspec_flaky_report.json') }
+
+ before do
+ FileUtils.rm(report_file_path) if File.exist?(report_file_path)
+ end
+
+ after do
+ FileUtils.rm(report_file_path) if File.exist?(report_file_path)
+ end
+
+ context 'when RspecFlaky::Config.generate_report? is false' do
+ before do
+ allow(RspecFlaky::Config).to receive(:generate_report?).and_return(false)
+ end
+
+ it 'does not write any report file' do
+ report.write(report_file_path)
+
+ expect(File.exist?(report_file_path)).to be(false)
+ end
+ end
+
+ context 'when RspecFlaky::Config.generate_report? is true' do
+ before do
+ allow(RspecFlaky::Config).to receive(:generate_report?).and_return(true)
+ end
+
+ it 'delegates the writes to RspecFlaky::Report' do
+ report.write(report_file_path)
+
+ expect(File.exist?(report_file_path)).to be(true)
+ expect(File.read(report_file_path))
+ .to eq(JSON.pretty_generate(report.flaky_examples.to_h))
+ end
+ end
+ end
+
+ describe '#prune_outdated' do
+ it 'returns a new collection without the examples older than 90 days by default' do
+ new_report = flaky_examples.to_h.dup.tap { |r| r.delete(:b) }
+ new_flaky_examples = report.prune_outdated
+
+ expect(new_flaky_examples).to be_a(described_class)
+ expect(new_flaky_examples.to_h).to eq(new_report)
+ expect(flaky_examples).to have_key(:b)
+ end
+
+ it 'accepts a given number of days' do
+ new_flaky_examples = report.prune_outdated(days: 200)
+
+ expect(new_flaky_examples.to_h).to eq(report.to_h)
+ end
+ end
+end
diff --git a/spec/lib/uploaded_file_spec.rb b/spec/lib/uploaded_file_spec.rb
new file mode 100644
index 00000000000..cc99e7e8911
--- /dev/null
+++ b/spec/lib/uploaded_file_spec.rb
@@ -0,0 +1,116 @@
+require 'spec_helper'
+
+describe UploadedFile do
+ describe ".from_params" do
+ let(:temp_dir) { Dir.tmpdir }
+ let(:temp_file) { Tempfile.new("test", temp_dir) }
+ let(:upload_path) { nil }
+
+ subject do
+ described_class.from_params(params, :file, upload_path)
+ end
+
+ before do
+ FileUtils.touch(temp_file)
+ end
+
+ after do
+ FileUtils.rm_f(temp_file)
+ FileUtils.rm_r(upload_path) if upload_path
+ end
+
+ context 'when valid file is specified' do
+ context 'only local path is specified' do
+ let(:params) do
+ { 'file.path' => temp_file.path }
+ end
+
+ it "succeeds" do
+ is_expected.not_to be_nil
+ end
+
+ it "generates filename from path" do
+ expect(subject.original_filename).to eq(::File.basename(temp_file.path))
+ end
+ end
+
+ context 'all parameters are specified' do
+ let(:params) do
+ { 'file.path' => temp_file.path,
+ 'file.name' => 'my_file.txt',
+ 'file.type' => 'my/type',
+ 'file.sha256' => 'sha256',
+ 'file.remote_id' => 'remote_id' }
+ end
+
+ it "succeeds" do
+ is_expected.not_to be_nil
+ end
+
+ it "generates filename from path" do
+ expect(subject.original_filename).to eq('my_file.txt')
+ expect(subject.content_type).to eq('my/type')
+ expect(subject.sha256).to eq('sha256')
+ expect(subject.remote_id).to eq('remote_id')
+ end
+ end
+ end
+
+ context 'when no params are specified' do
+ let(:params) do
+ {}
+ end
+
+ it "does not return an object" do
+ is_expected.to be_nil
+ end
+ end
+
+ context 'when only remote id is specified' do
+ let(:params) do
+ { 'file.remote_id' => 'remote_id' }
+ end
+
+ it "raises an error" do
+ expect { subject }.to raise_error(UploadedFile::InvalidPathError, /file is invalid/)
+ end
+ end
+
+ context 'when verifying allowed paths' do
+ let(:params) do
+ { 'file.path' => temp_file.path }
+ end
+
+ context 'when file is stored in system temporary folder' do
+ let(:temp_dir) { Dir.tmpdir }
+
+ it "succeeds" do
+ is_expected.not_to be_nil
+ end
+ end
+
+ context 'when file is stored in user provided upload path' do
+ let(:upload_path) { Dir.mktmpdir }
+ let(:temp_dir) { upload_path }
+
+ it "succeeds" do
+ is_expected.not_to be_nil
+ end
+ end
+
+ context 'when file is stored outside of user provided upload path' do
+ let!(:generated_dir) { Dir.mktmpdir }
+ let!(:temp_dir) { Dir.mktmpdir }
+
+ before do
+ # We overwrite default temporary path
+ allow(Dir).to receive(:tmpdir).and_return(generated_dir)
+ end
+
+ it "raises an error" do
+ expect { subject }.to raise_error(UploadedFile::InvalidPathError, /insecure path used/)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index 83c33797bbc..43e419cd7de 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -389,6 +389,48 @@ describe Notify do
end
end
end
+
+ shared_examples 'a push to an existing merge request' do
+ let(:push_user) { create(:user) }
+
+ subject do
+ described_class.push_to_merge_request_email(recipient.id, merge_request.id, push_user.id, new_commits: merge_request.commits, existing_commits: existing_commits)
+ end
+
+ it_behaves_like 'a multiple recipients email'
+ it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
+ let(:model) { merge_request }
+ end
+ it_behaves_like 'it should show Gmail Actions View Merge request link'
+ it_behaves_like 'an unsubscribeable thread'
+
+ it 'is sent as the push user' do
+ sender = subject.header[:from].addrs[0]
+
+ expect(sender.display_name).to eq(push_user.name)
+ expect(sender.address).to eq(gitlab_sender)
+ end
+
+ it 'has the correct subject and body' do
+ aggregate_failures do
+ is_expected.to have_referable_subject(merge_request, reply: true)
+ is_expected.to have_body_text("#{push_user.name} pushed new commits")
+ is_expected.to have_body_text(project_merge_request_path(project, merge_request))
+ end
+ end
+ end
+
+ describe 'that have new commits' do
+ let(:existing_commits) { [] }
+
+ it_behaves_like 'a push to an existing merge request'
+ end
+
+ describe 'that have new commits on top of an existing one' do
+ let(:existing_commits) { [merge_request.commits.first] }
+
+ it_behaves_like 'a push to an existing merge request'
+ end
end
context 'for issue notes' do
diff --git a/spec/mailers/previews/email_rejection_mailer_preview.rb b/spec/mailers/previews/email_rejection_mailer_preview.rb
new file mode 100644
index 00000000000..639e8471232
--- /dev/null
+++ b/spec/mailers/previews/email_rejection_mailer_preview.rb
@@ -0,0 +1,5 @@
+class EmailRejectionMailerPreview < ActionMailer::Preview
+ def rejection
+ EmailRejectionMailer.rejection("some rejection reason", "From: someone@example.com\nraw email here").message
+ end
+end
diff --git a/spec/mailers/previews/notify_preview.rb b/spec/mailers/previews/notify_preview.rb
index 43c3c89f140..e32fd0bd120 100644
--- a/spec/mailers/previews/notify_preview.rb
+++ b/spec/mailers/previews/notify_preview.rb
@@ -58,16 +58,89 @@ class NotifyPreview < ActionMailer::Preview
end
end
+ def closed_issue_email
+ Notify.closed_issue_email(user.id, issue.id, user.id).message
+ end
+
+ def issue_status_changed_email
+ Notify.issue_status_changed_email(user.id, issue.id, 'closed', user.id).message
+ end
+
+ def closed_merge_request_email
+ Notify.closed_merge_request_email(user.id, issue.id, user.id).message
+ end
+
+ def merge_request_status_email
+ Notify.merge_request_status_email(user.id, merge_request.id, 'closed', user.id).message
+ end
+
+ def merged_merge_request_email
+ Notify.merged_merge_request_email(user.id, merge_request.id, user.id).message
+ end
+
+ def member_access_denied_email
+ Notify.member_access_denied_email('project', project.id, user.id).message
+ end
+
+ def member_access_granted_email
+ Notify.member_access_granted_email('project', user.id).message
+ end
+
+ def member_access_requested_email
+ Notify.member_access_requested_email('group', user.id, 'some@example.com').message
+ end
+
+ def member_invite_accepted_email
+ Notify.member_invite_accepted_email('project', user.id).message
+ end
+
+ def member_invite_declined_email
+ Notify.member_invite_declined_email(
+ 'project',
+ project.id,
+ 'invite@example.com',
+ user.id
+ ).message
+ end
+
+ def member_invited_email
+ Notify.member_invited_email('project', user.id, '1234').message
+ end
+
+ def pages_domain_enabled_email
+ cleanup do
+ pages_domain = PagesDomain.new(domain: 'my.example.com', project: project, verified_at: Time.now, enabled_until: 1.week.from_now)
+
+ Notify.pages_domain_enabled_email(pages_domain, user).message
+ end
+ end
+
+ def pipeline_success_email
+ Notify.pipeline_success_email(pipeline, pipeline.user.try(:email))
+ end
+
+ def pipeline_failed_email
+ Notify.pipeline_failed_email(pipeline, pipeline.user.try(:email))
+ end
+
private
def project
@project ||= Project.find_by_full_path('gitlab-org/gitlab-test')
end
+ def issue
+ @merge_request ||= project.issues.first
+ end
+
def merge_request
@merge_request ||= project.merge_requests.first
end
+ def pipeline
+ @pipeline = Ci::Pipeline.last
+ end
+
def user
@user ||= User.last
end
@@ -94,14 +167,4 @@ class NotifyPreview < ActionMailer::Preview
email
end
-
- def pipeline_success_email
- pipeline = Ci::Pipeline.last
- Notify.pipeline_success_email(pipeline, pipeline.user.try(:email))
- end
-
- def pipeline_failed_email
- pipeline = Ci::Pipeline.last
- Notify.pipeline_failed_email(pipeline, pipeline.user.try(:email))
- end
end
diff --git a/spec/mailers/previews/repository_check_mailer_preview.rb b/spec/mailers/previews/repository_check_mailer_preview.rb
new file mode 100644
index 00000000000..19d4eab1805
--- /dev/null
+++ b/spec/mailers/previews/repository_check_mailer_preview.rb
@@ -0,0 +1,5 @@
+class RepositoryCheckMailerPreview < ActionMailer::Preview
+ def notify
+ RepositoryCheckMailer.notify(3).message
+ end
+end
diff --git a/spec/migrations/active_record/schedule_set_confidential_note_events_on_services_spec.rb b/spec/migrations/active_record/schedule_set_confidential_note_events_on_services_spec.rb
new file mode 100644
index 00000000000..4395e2f8264
--- /dev/null
+++ b/spec/migrations/active_record/schedule_set_confidential_note_events_on_services_spec.rb
@@ -0,0 +1,44 @@
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20180122154930_schedule_set_confidential_note_events_on_services.rb')
+
+describe ScheduleSetConfidentialNoteEventsOnServices, :migration, :sidekiq do
+ let(:services_table) { table(:services) }
+ let(:migration_class) { Gitlab::BackgroundMigration::SetConfidentialNoteEventsOnServices }
+ let(:migration_name) { migration_class.to_s.demodulize }
+
+ let!(:service_1) { services_table.create!(confidential_note_events: nil, note_events: true) }
+ let!(:service_2) { services_table.create!(confidential_note_events: nil, note_events: true) }
+ let!(:service_migrated) { services_table.create!(confidential_note_events: true, note_events: true) }
+ let!(:service_skip) { services_table.create!(confidential_note_events: nil, note_events: false) }
+ let!(:service_new) { services_table.create!(confidential_note_events: false, note_events: true) }
+ let!(:service_4) { services_table.create!(confidential_note_events: nil, note_events: true) }
+
+ before do
+ stub_const("#{described_class}::BATCH_SIZE", 1)
+ end
+
+ it 'schedules background migrations at correct time' do
+ Sidekiq::Testing.fake! do
+ Timecop.freeze do
+ migrate!
+
+ expect(migration_name).to be_scheduled_delayed_migration(20.minutes, service_1.id, service_1.id)
+ expect(migration_name).to be_scheduled_delayed_migration(40.minutes, service_2.id, service_2.id)
+ expect(migration_name).to be_scheduled_delayed_migration(60.minutes, service_4.id, service_4.id)
+ expect(BackgroundMigrationWorker.jobs.size).to eq 3
+ end
+ end
+ end
+
+ it 'correctly processes services' do
+ Sidekiq::Testing.inline! do
+ expect(services_table.where(confidential_note_events: nil).count).to eq 4
+ expect(services_table.where(confidential_note_events: true).count).to eq 1
+
+ migrate!
+
+ expect(services_table.where(confidential_note_events: nil).count).to eq 1
+ expect(services_table.where(confidential_note_events: true).count).to eq 4
+ end
+ end
+end
diff --git a/spec/migrations/add_foreign_keys_to_todos_spec.rb b/spec/migrations/add_foreign_keys_to_todos_spec.rb
index 4a22bd6f342..bf2fa5c0f56 100644
--- a/spec/migrations/add_foreign_keys_to_todos_spec.rb
+++ b/spec/migrations/add_foreign_keys_to_todos_spec.rb
@@ -4,8 +4,8 @@ require Rails.root.join('db', 'migrate', '20180201110056_add_foreign_keys_to_tod
describe AddForeignKeysToTodos, :migration do
let(:todos) { table(:todos) }
- let(:project) { create(:project) }
- let(:user) { create(:user) }
+ let(:project) { create(:project) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let(:user) { create(:user) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
context 'add foreign key on user_id' do
let!(:todo_with_user) { create_todo(user_id: user.id) }
@@ -34,7 +34,7 @@ describe AddForeignKeysToTodos, :migration do
end
context 'add foreign key on note_id' do
- let(:note) { create(:note) }
+ let(:note) { create(:note) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
let!(:todo_with_note) { create_todo(note_id: note.id) }
let!(:todo_with_invalid_note) { create_todo(note_id: 4711) }
let!(:todo_without_note) { create_todo(note_id: nil) }
diff --git a/spec/migrations/add_head_pipeline_for_each_merge_request_spec.rb b/spec/migrations/add_head_pipeline_for_each_merge_request_spec.rb
index 63defcb39bf..d8dd7a2fb83 100644
--- a/spec/migrations/add_head_pipeline_for_each_merge_request_spec.rb
+++ b/spec/migrations/add_head_pipeline_for_each_merge_request_spec.rb
@@ -6,18 +6,18 @@ describe AddHeadPipelineForEachMergeRequest, :delete do
let(:migration) { described_class.new }
- let!(:project) { create(:project) }
+ let!(:project) { create(:project) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
let!(:other_project) { fork_project(project) }
- let!(:pipeline_1) { create(:ci_pipeline, project: project, ref: "branch_1") }
- let!(:pipeline_2) { create(:ci_pipeline, project: other_project, ref: "branch_1") }
- let!(:pipeline_3) { create(:ci_pipeline, project: other_project, ref: "branch_1") }
- let!(:pipeline_4) { create(:ci_pipeline, project: project, ref: "branch_2") }
+ let!(:pipeline_1) { create(:ci_pipeline, project: project, ref: "branch_1") } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:pipeline_2) { create(:ci_pipeline, project: other_project, ref: "branch_1") } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:pipeline_3) { create(:ci_pipeline, project: other_project, ref: "branch_1") } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:pipeline_4) { create(:ci_pipeline, project: project, ref: "branch_2") } # rubocop:disable RSpec/FactoriesInMigrationSpecs
- let!(:mr_1) { create(:merge_request, source_project: project, target_project: project, source_branch: "branch_1", target_branch: "target_1") }
- let!(:mr_2) { create(:merge_request, source_project: other_project, target_project: project, source_branch: "branch_1", target_branch: "target_2") }
- let!(:mr_3) { create(:merge_request, source_project: project, target_project: project, source_branch: "branch_2", target_branch: "master") }
- let!(:mr_4) { create(:merge_request, source_project: project, target_project: project, source_branch: "branch_3", target_branch: "master") }
+ let!(:mr_1) { create(:merge_request, source_project: project, target_project: project, source_branch: "branch_1", target_branch: "target_1") } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:mr_2) { create(:merge_request, source_project: other_project, target_project: project, source_branch: "branch_1", target_branch: "target_2") } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:mr_3) { create(:merge_request, source_project: project, target_project: project, source_branch: "branch_2", target_branch: "master") } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:mr_4) { create(:merge_request, source_project: project, target_project: project, source_branch: "branch_3", target_branch: "master") } # rubocop:disable RSpec/FactoriesInMigrationSpecs
context "#up" do
context "when source_project and source_branch of pipeline are the same of merge request" do
diff --git a/spec/migrations/calculate_conv_dev_index_percentages_spec.rb b/spec/migrations/calculate_conv_dev_index_percentages_spec.rb
index f3a46025376..19f06810e54 100644
--- a/spec/migrations/calculate_conv_dev_index_percentages_spec.rb
+++ b/spec/migrations/calculate_conv_dev_index_percentages_spec.rb
@@ -6,7 +6,7 @@ require Rails.root.join('db', 'post_migrate', '20170803090603_calculate_conv_dev
describe CalculateConvDevIndexPercentages, :delete do
let(:migration) { described_class.new }
let!(:conv_dev_index) do
- create(:conversational_development_index_metric,
+ create(:conversational_development_index_metric, # rubocop:disable RSpec/FactoriesInMigrationSpecs
leader_notes: 0,
instance_milestones: 0,
percentage_issues: 0,
diff --git a/spec/migrations/cleanup_namespaceless_pending_delete_projects_spec.rb b/spec/migrations/cleanup_namespaceless_pending_delete_projects_spec.rb
index 033d0e7584d..b5980cb9ddb 100644
--- a/spec/migrations/cleanup_namespaceless_pending_delete_projects_spec.rb
+++ b/spec/migrations/cleanup_namespaceless_pending_delete_projects_spec.rb
@@ -10,9 +10,9 @@ describe CleanupNamespacelessPendingDeleteProjects, :migration, schema: 20180222
describe '#up' do
it 'only cleans up pending delete projects' do
- create(:project)
- create(:project, pending_delete: true)
- project = build(:project, pending_delete: true, namespace_id: nil)
+ create(:project) # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ create(:project, pending_delete: true) # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ project = build(:project, pending_delete: true, namespace_id: nil) # rubocop:disable RSpec/FactoriesInMigrationSpecs
project.save(validate: false)
expect(NamespacelessProjectDestroyWorker).to receive(:bulk_perform_async).with([[project.id]])
@@ -21,8 +21,8 @@ describe CleanupNamespacelessPendingDeleteProjects, :migration, schema: 20180222
end
it 'does nothing when no pending delete projects without namespace found' do
- create(:project)
- create(:project, pending_delete: true)
+ create(:project) # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ create(:project, pending_delete: true) # rubocop:disable RSpec/FactoriesInMigrationSpecs
expect(NamespacelessProjectDestroyWorker).not_to receive(:bulk_perform_async)
diff --git a/spec/migrations/cleanup_nonexisting_namespace_pending_delete_projects_spec.rb b/spec/migrations/cleanup_nonexisting_namespace_pending_delete_projects_spec.rb
index 7879105a334..8f40ac3e38b 100644
--- a/spec/migrations/cleanup_nonexisting_namespace_pending_delete_projects_spec.rb
+++ b/spec/migrations/cleanup_nonexisting_namespace_pending_delete_projects_spec.rb
@@ -9,11 +9,11 @@ describe CleanupNonexistingNamespacePendingDeleteProjects do
end
describe '#up' do
- set(:some_project) { create(:project) }
+ set(:some_project) { create(:project) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
it 'only cleans up when namespace does not exist' do
- create(:project, pending_delete: true)
- project = build(:project, pending_delete: true, namespace: nil, namespace_id: Namespace.maximum(:id).to_i.succ)
+ create(:project, pending_delete: true) # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ project = build(:project, pending_delete: true, namespace: nil, namespace_id: Namespace.maximum(:id).to_i.succ) # rubocop:disable RSpec/FactoriesInMigrationSpecs
project.save(validate: false)
expect(NamespacelessProjectDestroyWorker).to receive(:bulk_perform_async).with([[project.id]])
@@ -22,7 +22,7 @@ describe CleanupNonexistingNamespacePendingDeleteProjects do
end
it 'does nothing when no pending delete projects without namespace found' do
- create(:project, pending_delete: true, namespace: create(:namespace))
+ create(:project, pending_delete: true, namespace: create(:namespace)) # rubocop:disable RSpec/FactoriesInMigrationSpecs
expect(NamespacelessProjectDestroyWorker).not_to receive(:bulk_perform_async)
diff --git a/spec/migrations/issues_moved_to_id_foreign_key_spec.rb b/spec/migrations/issues_moved_to_id_foreign_key_spec.rb
index d2eef81f396..dd2b08099f2 100644
--- a/spec/migrations/issues_moved_to_id_foreign_key_spec.rb
+++ b/spec/migrations/issues_moved_to_id_foreign_key_spec.rb
@@ -5,9 +5,9 @@ require Rails.root.join('db', 'migrate', '20171106151218_issues_moved_to_id_fore
# only_mirror_protected_branches column in the projects table to create a
# project via FactoryBot.
describe IssuesMovedToIdForeignKey, :migration, schema: 20171114150259 do
- let!(:issue_first) { create(:issue, moved_to_id: issue_second.id) }
- let!(:issue_second) { create(:issue, moved_to_id: issue_third.id) }
- let!(:issue_third) { create(:issue) }
+ let!(:issue_first) { create(:issue, moved_to_id: issue_second.id) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:issue_second) { create(:issue, moved_to_id: issue_third.id) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:issue_third) { create(:issue) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
subject { described_class.new }
diff --git a/spec/migrations/migrate_gcp_clusters_to_new_clusters_architectures_spec.rb b/spec/migrations/migrate_gcp_clusters_to_new_clusters_architectures_spec.rb
index c81ec887ded..df009cec25c 100644
--- a/spec/migrations/migrate_gcp_clusters_to_new_clusters_architectures_spec.rb
+++ b/spec/migrations/migrate_gcp_clusters_to_new_clusters_architectures_spec.rb
@@ -4,8 +4,24 @@ require Rails.root.join('db', 'post_migrate', '20171013104327_migrate_gcp_cluste
describe MigrateGcpClustersToNewClustersArchitectures, :migration do
let(:projects) { table(:projects) }
let(:project) { projects.create }
- let(:user) { create(:user) }
- let(:service) { create(:kubernetes_service, project_id: project.id) }
+ let(:users) { table(:users) }
+ let(:user) { users.create! }
+ let(:service) { GcpMigrationSpec::KubernetesService.create!(project_id: project.id) }
+
+ module GcpMigrationSpec
+ class KubernetesService < ActiveRecord::Base
+ self.table_name = 'services'
+
+ serialize :properties, JSON # rubocop:disable Cop/ActiveRecordSerialize
+
+ default_value_for :active, true
+ default_value_for :type, 'KubernetesService'
+ default_value_for :properties, {
+ api_url: 'https://kubernetes.example.com',
+ token: 'a' * 40
+ }
+ end
+ end
context 'when cluster is being created' do
let(:project_id) { project.id }
diff --git a/spec/migrations/migrate_old_artifacts_spec.rb b/spec/migrations/migrate_old_artifacts_spec.rb
index 638b2853374..4187ab149a5 100644
--- a/spec/migrations/migrate_old_artifacts_spec.rb
+++ b/spec/migrations/migrate_old_artifacts_spec.rb
@@ -16,18 +16,18 @@ describe MigrateOldArtifacts do
end
context 'with migratable data' do
- set(:project1) { create(:project, ci_id: 2) }
- set(:project2) { create(:project, ci_id: 3) }
- set(:project3) { create(:project) }
+ set(:project1) { create(:project, ci_id: 2) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ set(:project2) { create(:project, ci_id: 3) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ set(:project3) { create(:project) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
- set(:pipeline1) { create(:ci_empty_pipeline, project: project1) }
- set(:pipeline2) { create(:ci_empty_pipeline, project: project2) }
- set(:pipeline3) { create(:ci_empty_pipeline, project: project3) }
+ set(:pipeline1) { create(:ci_empty_pipeline, project: project1) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ set(:pipeline2) { create(:ci_empty_pipeline, project: project2) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ set(:pipeline3) { create(:ci_empty_pipeline, project: project3) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
- let!(:build_with_legacy_artifacts) { create(:ci_build, pipeline: pipeline1) }
- let!(:build_without_artifacts) { create(:ci_build, pipeline: pipeline1) }
- let!(:build2) { create(:ci_build, pipeline: pipeline2) }
- let!(:build3) { create(:ci_build, pipeline: pipeline3) }
+ let!(:build_with_legacy_artifacts) { create(:ci_build, pipeline: pipeline1) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:build_without_artifacts) { create(:ci_build, pipeline: pipeline1) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:build2) { create(:ci_build, pipeline: pipeline2) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:build3) { create(:ci_build, pipeline: pipeline3) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
before do
setup_builds(build2, build3)
diff --git a/spec/migrations/migrate_process_commit_worker_jobs_spec.rb b/spec/migrations/migrate_process_commit_worker_jobs_spec.rb
index 657113812bd..4ee1d255fbd 100644
--- a/spec/migrations/migrate_process_commit_worker_jobs_spec.rb
+++ b/spec/migrations/migrate_process_commit_worker_jobs_spec.rb
@@ -4,8 +4,8 @@ require 'spec_helper'
require Rails.root.join('db', 'migrate', '20161124141322_migrate_process_commit_worker_jobs.rb')
describe MigrateProcessCommitWorkerJobs do
- let(:project) { create(:project, :legacy_storage, :repository) }
- let(:user) { create(:user) }
+ let(:project) { create(:project, :legacy_storage, :repository) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let(:user) { create(:user) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
let(:commit) { project.commit.raw.rugged_commit }
describe 'Project' do
diff --git a/spec/migrations/migrate_user_activities_to_users_last_activity_on_spec.rb b/spec/migrations/migrate_user_activities_to_users_last_activity_on_spec.rb
index a17c9c72bde..99173708190 100644
--- a/spec/migrations/migrate_user_activities_to_users_last_activity_on_spec.rb
+++ b/spec/migrations/migrate_user_activities_to_users_last_activity_on_spec.rb
@@ -5,8 +5,8 @@ require Rails.root.join('db', 'post_migrate', '20170324160416_migrate_user_activ
describe MigrateUserActivitiesToUsersLastActivityOn, :clean_gitlab_redis_shared_state, :delete do
let(:migration) { described_class.new }
- let!(:user_active_1) { create(:user) }
- let!(:user_active_2) { create(:user) }
+ let!(:user_active_1) { create(:user) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:user_active_2) { create(:user) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
def record_activity(user, time)
Gitlab::Redis::SharedState.with do |redis|
diff --git a/spec/migrations/migrate_user_project_view_spec.rb b/spec/migrations/migrate_user_project_view_spec.rb
index 31d16e17d7b..80468b9d01e 100644
--- a/spec/migrations/migrate_user_project_view_spec.rb
+++ b/spec/migrations/migrate_user_project_view_spec.rb
@@ -5,7 +5,7 @@ require Rails.root.join('db', 'post_migrate', '20170406142253_migrate_user_proje
describe MigrateUserProjectView, :delete do
let(:migration) { described_class.new }
- let!(:user) { create(:user, project_view: 'readme') }
+ let!(:user) { create(:user, project_view: 'readme') } # rubocop:disable RSpec/FactoriesInMigrationSpecs
describe '#up' do
it 'updates project view setting with new value' do
diff --git a/spec/migrations/move_personal_snippets_files_spec.rb b/spec/migrations/move_personal_snippets_files_spec.rb
index 1a319eccc0d..1f39ad98fb8 100644
--- a/spec/migrations/move_personal_snippets_files_spec.rb
+++ b/spec/migrations/move_personal_snippets_files_spec.rb
@@ -16,14 +16,14 @@ describe MovePersonalSnippetsFiles do
describe "#up" do
let(:snippet) do
- snippet = create(:personal_snippet)
+ snippet = create(:personal_snippet) # rubocop:disable RSpec/FactoriesInMigrationSpecs
create_upload('picture.jpg', snippet)
snippet.update(description: markdown_linking_file('picture.jpg', snippet))
snippet
end
let(:snippet_with_missing_file) do
- snippet = create(:snippet)
+ snippet = create(:snippet) # rubocop:disable RSpec/FactoriesInMigrationSpecs
create_upload('picture.jpg', snippet, create_file: false)
snippet.update(description: markdown_linking_file('picture.jpg', snippet))
snippet
@@ -62,7 +62,7 @@ describe MovePersonalSnippetsFiles do
secret = "secret#{snippet.id}"
file_location = "/uploads/-/system/personal_snippet/#{snippet.id}/#{secret}/picture.jpg"
markdown = markdown_linking_file('picture.jpg', snippet)
- note = create(:note_on_personal_snippet, noteable: snippet, note: "with #{markdown}")
+ note = create(:note_on_personal_snippet, noteable: snippet, note: "with #{markdown}") # rubocop:disable RSpec/FactoriesInMigrationSpecs
migration.up
@@ -73,14 +73,14 @@ describe MovePersonalSnippetsFiles do
describe "#down" do
let(:snippet) do
- snippet = create(:personal_snippet)
+ snippet = create(:personal_snippet) # rubocop:disable RSpec/FactoriesInMigrationSpecs
create_upload('picture.jpg', snippet, in_new_path: true)
snippet.update(description: markdown_linking_file('picture.jpg', snippet, in_new_path: true))
snippet
end
let(:snippet_with_missing_file) do
- snippet = create(:personal_snippet)
+ snippet = create(:personal_snippet) # rubocop:disable RSpec/FactoriesInMigrationSpecs
create_upload('picture.jpg', snippet, create_file: false, in_new_path: true)
snippet.update(description: markdown_linking_file('picture.jpg', snippet, in_new_path: true))
snippet
@@ -119,7 +119,7 @@ describe MovePersonalSnippetsFiles do
markdown = markdown_linking_file('picture.jpg', snippet, in_new_path: true)
secret = "secret#{snippet.id}"
file_location = "/uploads/personal_snippet/#{snippet.id}/#{secret}/picture.jpg"
- note = create(:note_on_personal_snippet, noteable: snippet, note: "with #{markdown}")
+ note = create(:note_on_personal_snippet, noteable: snippet, note: "with #{markdown}") # rubocop:disable RSpec/FactoriesInMigrationSpecs
migration.down
@@ -135,7 +135,7 @@ describe MovePersonalSnippetsFiles do
secret = '123456789'
filename = 'hello.jpg'
- snippet = create(:personal_snippet)
+ snippet = create(:personal_snippet) # rubocop:disable RSpec/FactoriesInMigrationSpecs
path_before = "/uploads/personal_snippet/#{snippet.id}/#{secret}/#{filename}"
path_after = "/uploads/system/personal_snippet/#{snippet.id}/#{secret}/#{filename}"
@@ -161,7 +161,7 @@ describe MovePersonalSnippetsFiles do
FileUtils.touch(absolute_path)
end
- create(:upload, model: snippet, path: "#{secret}/#{filename}", uploader: PersonalFileUploader)
+ create(:upload, model: snippet, path: "#{secret}/#{filename}", uploader: PersonalFileUploader) # rubocop:disable RSpec/FactoriesInMigrationSpecs
end
def markdown_linking_file(filename, snippet, in_new_path: false)
diff --git a/spec/migrations/remove_dot_git_from_usernames_spec.rb b/spec/migrations/remove_dot_git_from_usernames_spec.rb
index 3a88a66a476..f11880a83e9 100644
--- a/spec/migrations/remove_dot_git_from_usernames_spec.rb
+++ b/spec/migrations/remove_dot_git_from_usernames_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
require Rails.root.join('db', 'migrate', '20161226122833_remove_dot_git_from_usernames.rb')
describe RemoveDotGitFromUsernames do
- let(:user) { create(:user) }
+ let(:user) { create(:user) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
let(:migration) { described_class.new }
describe '#up' do
@@ -23,7 +23,7 @@ describe RemoveDotGitFromUsernames do
context 'when new path exists already' do
describe '#up' do
- let(:user2) { create(:user) }
+ let(:user2) { create(:user) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
before do
update_namespace(user, 'test.git')
diff --git a/spec/migrations/remove_duplicate_mr_events_spec.rb b/spec/migrations/remove_duplicate_mr_events_spec.rb
index e51872239ad..2509ac6afd6 100644
--- a/spec/migrations/remove_duplicate_mr_events_spec.rb
+++ b/spec/migrations/remove_duplicate_mr_events_spec.rb
@@ -5,17 +5,17 @@ describe RemoveDuplicateMrEvents, :delete do
let(:migration) { described_class.new }
describe '#up' do
- let(:user) { create(:user) }
- let(:merge_requests) { create_list(:merge_request, 2) }
- let(:issue) { create(:issue) }
+ let(:user) { create(:user) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let(:merge_requests) { create_list(:merge_request, 2) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let(:issue) { create(:issue) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
let!(:events) do
[
- create(:event, :created, author: user, target: merge_requests.first),
- create(:event, :created, author: user, target: merge_requests.first),
- create(:event, :updated, author: user, target: merge_requests.first),
- create(:event, :created, author: user, target: merge_requests.second),
- create(:event, :created, author: user, target: issue),
- create(:event, :created, author: user, target: issue)
+ create(:event, :created, author: user, target: merge_requests.first), # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ create(:event, :created, author: user, target: merge_requests.first), # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ create(:event, :updated, author: user, target: merge_requests.first), # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ create(:event, :created, author: user, target: merge_requests.second), # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ create(:event, :created, author: user, target: issue), # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ create(:event, :created, author: user, target: issue) # rubocop:disable RSpec/FactoriesInMigrationSpecs
]
end
diff --git a/spec/migrations/remove_project_labels_group_id_spec.rb b/spec/migrations/remove_project_labels_group_id_spec.rb
index d80d61af20b..01b09e71d83 100644
--- a/spec/migrations/remove_project_labels_group_id_spec.rb
+++ b/spec/migrations/remove_project_labels_group_id_spec.rb
@@ -5,9 +5,9 @@ require Rails.root.join('db', 'post_migrate', '20180202111106_remove_project_lab
describe RemoveProjectLabelsGroupId, :delete do
let(:migration) { described_class.new }
- let(:group) { create(:group) }
- let!(:project_label) { create(:label, group_id: group.id) }
- let!(:group_label) { create(:group_label) }
+ let(:group) { create(:group) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:project_label) { create(:label, group_id: group.id) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:group_label) { create(:group_label) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
describe '#up' do
it 'updates the project labels group ID' do
diff --git a/spec/migrations/remove_soft_removed_objects_spec.rb b/spec/migrations/remove_soft_removed_objects_spec.rb
index ec089f9106d..fb70c284f5e 100644
--- a/spec/migrations/remove_soft_removed_objects_spec.rb
+++ b/spec/migrations/remove_soft_removed_objects_spec.rb
@@ -8,7 +8,7 @@ describe RemoveSoftRemovedObjects, :migration do
create_with_deleted_at(:issue)
end
- regular_issue = create(:issue)
+ regular_issue = create(:issue) # rubocop:disable RSpec/FactoriesInMigrationSpecs
run_migration
@@ -28,7 +28,7 @@ describe RemoveSoftRemovedObjects, :migration do
it 'removes routes of soft removed personal namespaces' do
namespace = create_with_deleted_at(:namespace)
- group = create(:group)
+ group = create(:group) # rubocop:disable RSpec/FactoriesInMigrationSpecs
expect(Route.where(source: namespace).exists?).to eq(true)
expect(Route.where(source: group).exists?).to eq(true)
@@ -41,7 +41,7 @@ describe RemoveSoftRemovedObjects, :migration do
it 'schedules the removal of soft removed groups' do
group = create_with_deleted_at(:group)
- admin = create(:user, admin: true)
+ admin = create(:user, admin: true) # rubocop:disable RSpec/FactoriesInMigrationSpecs
expect_any_instance_of(GroupDestroyWorker)
.to receive(:perform)
@@ -67,7 +67,7 @@ describe RemoveSoftRemovedObjects, :migration do
end
def create_with_deleted_at(*args)
- row = create(*args)
+ row = create(*args) # rubocop:disable RSpec/FactoriesInMigrationSpecs
# We set "deleted_at" this way so we don't run into any column cache issues.
row.class.where(id: row.id).update_all(deleted_at: 1.year.ago)
diff --git a/spec/migrations/rename_more_reserved_project_names_spec.rb b/spec/migrations/rename_more_reserved_project_names_spec.rb
index 75310075cc5..034e8a6a4e5 100644
--- a/spec/migrations/rename_more_reserved_project_names_spec.rb
+++ b/spec/migrations/rename_more_reserved_project_names_spec.rb
@@ -8,7 +8,7 @@ require Rails.root.join('db', 'post_migrate', '20170313133418_rename_more_reserv
# around this we use the DELETE cleaning strategy.
describe RenameMoreReservedProjectNames, :delete do
let(:migration) { described_class.new }
- let!(:project) { create(:project) }
+ let!(:project) { create(:project) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
before do
project.path = 'artifacts'
diff --git a/spec/migrations/rename_reserved_project_names_spec.rb b/spec/migrations/rename_reserved_project_names_spec.rb
index 34336d705b1..592ac2b5fb9 100644
--- a/spec/migrations/rename_reserved_project_names_spec.rb
+++ b/spec/migrations/rename_reserved_project_names_spec.rb
@@ -12,7 +12,7 @@ require Rails.root.join('db', 'post_migrate', '20161221153951_rename_reserved_pr
# Ideally, the test should not use factories and rely on the `table` helper instead.
describe RenameReservedProjectNames, :migration, schema: :latest do
let(:migration) { described_class.new }
- let!(:project) { create(:project) }
+ let!(:project) { create(:project) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
before do
project.path = 'projects'
diff --git a/spec/migrations/rename_users_with_renamed_namespace_spec.rb b/spec/migrations/rename_users_with_renamed_namespace_spec.rb
index cbc0ebeb44d..b8a4dc2b2c0 100644
--- a/spec/migrations/rename_users_with_renamed_namespace_spec.rb
+++ b/spec/migrations/rename_users_with_renamed_namespace_spec.rb
@@ -3,13 +3,13 @@ require Rails.root.join('db', 'post_migrate', '20170518200835_rename_users_with_
describe RenameUsersWithRenamedNamespace, :delete do
it 'renames a user that had their namespace renamed to the namespace path' do
- other_user = create(:user, username: 'kodingu')
- other_user1 = create(:user, username: 'api0')
+ other_user = create(:user, username: 'kodingu') # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ other_user1 = create(:user, username: 'api0') # rubocop:disable RSpec/FactoriesInMigrationSpecs
- user = create(:user, username: "Users0")
- user.update_attribute(:username, 'Users')
- user1 = create(:user, username: "import0")
- user1.update_attribute(:username, 'import')
+ user = create(:user, username: "Users0") # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ user.update_column(:username, 'Users')
+ user1 = create(:user, username: "import0") # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ user1.update_column(:username, 'import')
described_class.new.up
diff --git a/spec/migrations/schedule_build_stage_migration_spec.rb b/spec/migrations/reschedule_builds_stages_migration_spec.rb
similarity index 77%
rename from spec/migrations/schedule_build_stage_migration_spec.rb
rename to spec/migrations/reschedule_builds_stages_migration_spec.rb
index e2ca35447fb..3bfd9dd9f6b 100644
--- a/spec/migrations/schedule_build_stage_migration_spec.rb
+++ b/spec/migrations/reschedule_builds_stages_migration_spec.rb
@@ -1,7 +1,8 @@
require 'spec_helper'
-require Rails.root.join('db', 'post_migrate', '20180212101928_schedule_build_stage_migration')
+require Rails.root.join('db', 'post_migrate', '20180405101928_reschedule_builds_stages_migration')
-describe ScheduleBuildStageMigration, :sidekiq, :migration do
+describe RescheduleBuildsStagesMigration, :sidekiq, :migration do
+ let(:namespaces) { table(:namespaces) }
let(:projects) { table(:projects) }
let(:pipelines) { table(:ci_pipelines) }
let(:stages) { table(:ci_stages) }
@@ -10,7 +11,8 @@ describe ScheduleBuildStageMigration, :sidekiq, :migration do
before do
stub_const("#{described_class}::BATCH_SIZE", 1)
- projects.create!(id: 123, name: 'gitlab', path: 'gitlab-ce')
+ namespaces.create(id: 12, name: 'gitlab-org', path: 'gitlab-org')
+ projects.create!(id: 123, namespace_id: 12, name: 'gitlab', path: 'gitlab')
pipelines.create!(id: 1, project_id: 123, ref: 'master', sha: 'adf43c3a')
stages.create!(id: 1, project_id: 123, pipeline_id: 1, name: 'test')
diff --git a/spec/migrations/schedule_create_gpg_key_subkeys_from_gpg_keys_spec.rb b/spec/migrations/schedule_create_gpg_key_subkeys_from_gpg_keys_spec.rb
index 65ec07da31c..ed306fb3d62 100644
--- a/spec/migrations/schedule_create_gpg_key_subkeys_from_gpg_keys_spec.rb
+++ b/spec/migrations/schedule_create_gpg_key_subkeys_from_gpg_keys_spec.rb
@@ -3,8 +3,8 @@ require Rails.root.join('db', 'post_migrate', '20171005130944_schedule_create_gp
describe ScheduleCreateGpgKeySubkeysFromGpgKeys, :migration, :sidekiq do
before do
- create(:gpg_key, id: 1, key: GpgHelpers::User1.public_key)
- create(:gpg_key, id: 2, key: GpgHelpers::User3.public_key)
+ create(:gpg_key, id: 1, key: GpgHelpers::User1.public_key) # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ create(:gpg_key, id: 2, key: GpgHelpers::User3.public_key) # rubocop:disable RSpec/FactoriesInMigrationSpecs
# Delete all subkeys so they can be recreated
GpgKeySubkey.destroy_all
end
diff --git a/spec/migrations/schedule_populate_merge_request_metrics_with_events_data_spec.rb b/spec/migrations/schedule_populate_merge_request_metrics_with_events_data_spec.rb
index 7494624066a..578440cba20 100644
--- a/spec/migrations/schedule_populate_merge_request_metrics_with_events_data_spec.rb
+++ b/spec/migrations/schedule_populate_merge_request_metrics_with_events_data_spec.rb
@@ -8,7 +8,7 @@ describe SchedulePopulateMergeRequestMetricsWithEventsData, :migration, :sidekiq
.to receive(:commits_count=).and_return(nil)
end
- let!(:mrs) { create_list(:merge_request, 3) }
+ let!(:mrs) { create_list(:merge_request, 3) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
it 'correctly schedules background migrations' do
stub_const("#{described_class.name}::BATCH_SIZE", 2)
diff --git a/spec/migrations/schedule_set_confidential_note_events_on_webhooks_spec.rb b/spec/migrations/schedule_set_confidential_note_events_on_webhooks_spec.rb
new file mode 100644
index 00000000000..027f4a91c90
--- /dev/null
+++ b/spec/migrations/schedule_set_confidential_note_events_on_webhooks_spec.rb
@@ -0,0 +1,44 @@
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20180104131052_schedule_set_confidential_note_events_on_webhooks.rb')
+
+describe ScheduleSetConfidentialNoteEventsOnWebhooks, :migration, :sidekiq do
+ let(:web_hooks_table) { table(:web_hooks) }
+ let(:migration_class) { Gitlab::BackgroundMigration::SetConfidentialNoteEventsOnWebhooks }
+ let(:migration_name) { migration_class.to_s.demodulize }
+
+ let!(:web_hook_1) { web_hooks_table.create!(confidential_note_events: nil, note_events: true) }
+ let!(:web_hook_2) { web_hooks_table.create!(confidential_note_events: nil, note_events: true) }
+ let!(:web_hook_migrated) { web_hooks_table.create!(confidential_note_events: true, note_events: true) }
+ let!(:web_hook_skip) { web_hooks_table.create!(confidential_note_events: nil, note_events: false) }
+ let!(:web_hook_new) { web_hooks_table.create!(confidential_note_events: false, note_events: true) }
+ let!(:web_hook_4) { web_hooks_table.create!(confidential_note_events: nil, note_events: true) }
+
+ before do
+ stub_const("#{described_class}::BATCH_SIZE", 1)
+ end
+
+ it 'schedules background migrations at correct time' do
+ Sidekiq::Testing.fake! do
+ Timecop.freeze do
+ migrate!
+
+ expect(migration_name).to be_scheduled_delayed_migration(5.minutes, web_hook_1.id, web_hook_1.id)
+ expect(migration_name).to be_scheduled_delayed_migration(10.minutes, web_hook_2.id, web_hook_2.id)
+ expect(migration_name).to be_scheduled_delayed_migration(15.minutes, web_hook_4.id, web_hook_4.id)
+ expect(BackgroundMigrationWorker.jobs.size).to eq 3
+ end
+ end
+ end
+
+ it 'correctly processes web hooks' do
+ Sidekiq::Testing.inline! do
+ expect(web_hooks_table.where(confidential_note_events: nil).count).to eq 4
+ expect(web_hooks_table.where(confidential_note_events: true).count).to eq 1
+
+ migrate!
+
+ expect(web_hooks_table.where(confidential_note_events: nil).count).to eq 1
+ expect(web_hooks_table.where(confidential_note_events: true).count).to eq 4
+ end
+ end
+end
diff --git a/spec/migrations/turn_nested_groups_into_regular_groups_for_mysql_spec.rb b/spec/migrations/turn_nested_groups_into_regular_groups_for_mysql_spec.rb
index 528dc54781d..560409f08de 100644
--- a/spec/migrations/turn_nested_groups_into_regular_groups_for_mysql_spec.rb
+++ b/spec/migrations/turn_nested_groups_into_regular_groups_for_mysql_spec.rb
@@ -2,10 +2,10 @@ require 'spec_helper'
require Rails.root.join('db', 'migrate', '20170503140202_turn_nested_groups_into_regular_groups_for_mysql.rb')
describe TurnNestedGroupsIntoRegularGroupsForMysql do
- let!(:parent_group) { create(:group) }
- let!(:child_group) { create(:group, parent: parent_group) }
- let!(:project) { create(:project, :legacy_storage, :empty_repo, namespace: child_group) }
- let!(:member) { create(:user) }
+ let!(:parent_group) { create(:group) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:child_group) { create(:group, parent: parent_group) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:project) { create(:project, :legacy_storage, :empty_repo, namespace: child_group) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:member) { create(:user) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
let(:migration) { described_class.new }
before do
diff --git a/spec/migrations/update_retried_for_ci_build_spec.rb b/spec/migrations/update_retried_for_ci_build_spec.rb
index ccb77766b84..637dcbb8e01 100644
--- a/spec/migrations/update_retried_for_ci_build_spec.rb
+++ b/spec/migrations/update_retried_for_ci_build_spec.rb
@@ -2,9 +2,9 @@ require 'spec_helper'
require Rails.root.join('db', 'post_migrate', '20170503004427_update_retried_for_ci_build.rb')
describe UpdateRetriedForCiBuild, :delete do
- let(:pipeline) { create(:ci_pipeline) }
- let!(:build_old) { create(:ci_build, pipeline: pipeline, name: 'test') }
- let!(:build_new) { create(:ci_build, pipeline: pipeline, name: 'test') }
+ let(:pipeline) { create(:ci_pipeline) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:build_old) { create(:ci_build, pipeline: pipeline, name: 'test') } # rubocop:disable RSpec/FactoriesInMigrationSpecs
+ let!(:build_new) { create(:ci_build, pipeline: pipeline, name: 'test') } # rubocop:disable RSpec/FactoriesInMigrationSpecs
before do
described_class.new.up
diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb
index cd175dba6da..199f49d0bf2 100644
--- a/spec/models/ability_spec.rb
+++ b/spec/models/ability_spec.rb
@@ -7,62 +7,6 @@ describe Ability do
end
end
- describe '.can_edit_note?' do
- let(:project) { create(:project) }
- let(:note) { create(:note_on_issue, project: project) }
-
- context 'using an anonymous user' do
- it 'returns false' do
- expect(described_class.can_edit_note?(nil, note)).to be_falsy
- end
- end
-
- context 'using a system note' do
- it 'returns false' do
- system_note = create(:note, system: true)
- user = create(:user)
-
- expect(described_class.can_edit_note?(user, system_note)).to be_falsy
- end
- end
-
- context 'using users with different access levels' do
- let(:user) { create(:user) }
-
- it 'returns true for the author' do
- expect(described_class.can_edit_note?(note.author, note)).to be_truthy
- end
-
- it 'returns false for a guest user' do
- project.add_guest(user)
-
- expect(described_class.can_edit_note?(user, note)).to be_falsy
- end
-
- it 'returns false for a developer' do
- project.add_developer(user)
-
- expect(described_class.can_edit_note?(user, note)).to be_falsy
- end
-
- it 'returns true for a master' do
- project.add_master(user)
-
- expect(described_class.can_edit_note?(user, note)).to be_truthy
- end
-
- it 'returns true for a group owner' do
- group = create(:group)
- project.project_group_links.create(
- group: group,
- group_access: Gitlab::Access::MASTER)
- group.add_owner(user)
-
- expect(described_class.can_edit_note?(user, note)).to be_truthy
- end
- end
- end
-
describe '.users_that_can_read_project' do
context 'using a public project' do
it 'returns all the users' do
diff --git a/spec/models/broadcast_message_spec.rb b/spec/models/broadcast_message_spec.rb
index 461e754dc1f..5326f9cb8c0 100644
--- a/spec/models/broadcast_message_spec.rb
+++ b/spec/models/broadcast_message_spec.rb
@@ -51,7 +51,11 @@ describe BroadcastMessage do
expect(described_class).to receive(:where).and_call_original.once
- 2.times { described_class.current }
+ described_class.current
+
+ Timecop.travel(1.year) do
+ described_class.current
+ end
end
it 'includes messages that need to be displayed in the future' do
diff --git a/spec/models/ci/build_metadata_spec.rb b/spec/models/ci/build_metadata_spec.rb
index 268561ee941..7e75d5a5411 100644
--- a/spec/models/ci/build_metadata_spec.rb
+++ b/spec/models/ci/build_metadata_spec.rb
@@ -13,7 +13,7 @@ describe Ci::BuildMetadata do
end
let(:build) { create(:ci_build, pipeline: pipeline) }
- let(:build_metadata) { create(:ci_build_metadata, build: build) }
+ let(:build_metadata) { build.metadata }
describe '#update_timeout_state' do
subject { build_metadata }
diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb
index b7ed8be69fc..c536dab2681 100644
--- a/spec/models/commit_status_spec.rb
+++ b/spec/models/commit_status_spec.rb
@@ -368,9 +368,7 @@ describe CommitStatus do
'rspec:windows 0 : / 1' => 'rspec:windows',
'rspec:windows 0 : / 1 name' => 'rspec:windows name',
'0 1 name ruby' => 'name ruby',
- '0 :/ 1 name ruby' => 'name ruby',
- 'golang test 1.8' => 'golang test',
- '1.9 golang test' => 'golang test'
+ '0 :/ 1 name ruby' => 'name ruby'
}
tests.each do |name, group_name|
diff --git a/spec/models/concerns/awardable_spec.rb b/spec/models/concerns/awardable_spec.rb
index 34f923d3f0c..a980cff28fb 100644
--- a/spec/models/concerns/awardable_spec.rb
+++ b/spec/models/concerns/awardable_spec.rb
@@ -46,6 +46,31 @@ describe Awardable do
end
end
+ describe '#user_can_award?' do
+ let(:user) { create(:user) }
+
+ before do
+ issue.project.add_guest(user)
+ end
+
+ it 'does not allow upvoting or downvoting your own issue' do
+ issue.update!(author: user)
+
+ expect(issue.user_can_award?(user, AwardEmoji::DOWNVOTE_NAME)).to be_falsy
+ expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAME)).to be_falsy
+ end
+
+ it 'is truthy when the user is allowed to award emoji' do
+ expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAME)).to be_truthy
+ end
+
+ it 'is falsy when the project is archived' do
+ issue.project.update!(archived: true)
+
+ expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAME)).to be_falsy
+ end
+ end
+
describe "#toggle_award_emoji" do
it "adds an emoji if it isn't awarded yet" do
expect { issue.toggle_award_emoji("thumbsup", award_emoji.user) }.to change { AwardEmoji.count }.by(1)
diff --git a/spec/models/concerns/chronic_duration_attribute_spec.rb b/spec/models/concerns/chronic_duration_attribute_spec.rb
index 27c86e60e60..8847623f705 100644
--- a/spec/models/concerns/chronic_duration_attribute_spec.rb
+++ b/spec/models/concerns/chronic_duration_attribute_spec.rb
@@ -63,8 +63,8 @@ shared_examples 'ChronicDurationAttribute writer' do
subject.send("#{virtual_field}=", '')
end
- it 'writes nil' do
- expect(subject.send(source_field)).to be_nil
+ it 'writes default value' do
+ expect(subject.send(source_field)).to eq(default_value)
end
it 'passes validation' do
@@ -77,8 +77,8 @@ shared_examples 'ChronicDurationAttribute writer' do
subject.send("#{virtual_field}=", nil)
end
- it 'writes nil' do
- expect(subject.send(source_field)).to be_nil
+ it 'writes default value' do
+ expect(subject.send(source_field)).to eq(default_value)
end
it 'passes validation' do
@@ -92,20 +92,34 @@ shared_examples 'ChronicDurationAttribute writer' do
end
describe 'ChronicDurationAttribute' do
- let(:source_field) {:maximum_timeout}
- let(:virtual_field) {:maximum_timeout_human_readable}
+ context 'when default value is not set' do
+ let(:source_field) {:maximum_timeout}
+ let(:virtual_field) {:maximum_timeout_human_readable}
+ let(:default_value) { nil }
- subject { Ci::Runner.new }
+ subject { create(:ci_runner) }
- it_behaves_like 'ChronicDurationAttribute reader'
- it_behaves_like 'ChronicDurationAttribute writer'
+ it_behaves_like 'ChronicDurationAttribute reader'
+ it_behaves_like 'ChronicDurationAttribute writer'
+ end
+
+ context 'when default value is set' do
+ let(:source_field) {:build_timeout}
+ let(:virtual_field) {:build_timeout_human_readable}
+ let(:default_value) { 3600 }
+
+ subject { create(:project) }
+
+ it_behaves_like 'ChronicDurationAttribute reader'
+ it_behaves_like 'ChronicDurationAttribute writer'
+ end
end
describe 'ChronicDurationAttribute - reader' do
let(:source_field) {:timeout}
let(:virtual_field) {:timeout_human_readable}
- subject {Ci::BuildMetadata.new}
+ subject { create(:ci_build).ensure_metadata }
it "doesn't contain dynamically created writer method" do
expect(subject.class).not_to be_public_method_defined("#{virtual_field}=")
diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb
index f8874d14e3f..05693f067e1 100644
--- a/spec/models/concerns/issuable_spec.rb
+++ b/spec/models/concerns/issuable_spec.rb
@@ -176,7 +176,7 @@ describe Issuable do
end
end
- describe "#sort" do
+ describe "#sort_by_attribute" do
let(:project) { create(:project) }
context "by milestone due date" do
@@ -193,12 +193,12 @@ describe Issuable do
let!(:issue3) { create(:issue, project: project) }
it "sorts desc" do
- issues = project.issues.sort('milestone_due_desc')
+ issues = project.issues.sort_by_attribute('milestone_due_desc')
expect(issues).to match_array([issue2, issue1, issue, issue3])
end
it "sorts asc" do
- issues = project.issues.sort('milestone_due_asc')
+ issues = project.issues.sort_by_attribute('milestone_due_asc')
expect(issues).to match_array([issue1, issue2, issue, issue3])
end
end
@@ -210,7 +210,7 @@ describe Issuable do
it 'has no duplicates across pages' do
sorted_issue_ids = 1.upto(10).map do |i|
- project.issues.sort('milestone_due_desc').page(i).per(1).first.id
+ project.issues.sort_by_attribute('milestone_due_desc').page(i).per(1).first.id
end
expect(sorted_issue_ids).to eq(sorted_issue_ids.uniq)
diff --git a/spec/models/deploy_token_spec.rb b/spec/models/deploy_token_spec.rb
new file mode 100644
index 00000000000..780b200e837
--- /dev/null
+++ b/spec/models/deploy_token_spec.rb
@@ -0,0 +1,145 @@
+require 'spec_helper'
+
+describe DeployToken do
+ subject(:deploy_token) { create(:deploy_token) }
+
+ it { is_expected.to have_many :project_deploy_tokens }
+ it { is_expected.to have_many(:projects).through(:project_deploy_tokens) }
+
+ describe '#ensure_token' do
+ it 'should ensure a token' do
+ deploy_token.token = nil
+ deploy_token.save
+
+ expect(deploy_token.token).not_to be_empty
+ end
+ end
+
+ describe '#ensure_at_least_one_scope' do
+ context 'with at least one scope' do
+ it 'should be valid' do
+ is_expected.to be_valid
+ end
+ end
+
+ context 'with no scopes' do
+ it 'should be invalid' do
+ deploy_token = build(:deploy_token, read_repository: false, read_registry: false)
+
+ expect(deploy_token).not_to be_valid
+ expect(deploy_token.errors[:base].first).to eq("Scopes can't be blank")
+ end
+ end
+ end
+
+ describe '#scopes' do
+ context 'with all the scopes' do
+ it 'should return scopes assigned to DeployToken' do
+ expect(deploy_token.scopes).to eq([:read_repository, :read_registry])
+ end
+ end
+
+ context 'with only one scope' do
+ it 'should return scopes assigned to DeployToken' do
+ deploy_token = create(:deploy_token, read_registry: false)
+ expect(deploy_token.scopes).to eq([:read_repository])
+ end
+ end
+ end
+
+ describe '#revoke!' do
+ it 'should update revoke attribute' do
+ deploy_token.revoke!
+ expect(deploy_token.revoked?).to be_truthy
+ end
+ end
+
+ describe "#active?" do
+ context "when it has been revoked" do
+ it 'should return false' do
+ deploy_token.revoke!
+ expect(deploy_token.active?).to be_falsy
+ end
+ end
+
+ context "when it hasn't been revoked" do
+ it 'should return true' do
+ expect(deploy_token.active?).to be_truthy
+ end
+ end
+ end
+
+ describe '#username' do
+ it 'returns a harcoded username' do
+ expect(deploy_token.username).to eq("gitlab+deploy-token-#{deploy_token.id}")
+ end
+ end
+
+ describe '#has_access_to?' do
+ let(:project) { create(:project) }
+
+ subject { deploy_token.has_access_to?(project) }
+
+ context 'when deploy token is active and related to project' do
+ let(:deploy_token) { create(:deploy_token, projects: [project]) }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'when deploy token is active but not related to project' do
+ let(:deploy_token) { create(:deploy_token) }
+
+ it { is_expected.to be_falsy }
+ end
+
+ context 'when deploy token is revoked and related to project' do
+ let(:deploy_token) { create(:deploy_token, :revoked, projects: [project]) }
+
+ it { is_expected.to be_falsy }
+ end
+
+ context 'when deploy token is revoked and not related to the project' do
+ let(:deploy_token) { create(:deploy_token, :revoked) }
+
+ it { is_expected.to be_falsy }
+ end
+ end
+
+ describe '#expires_at' do
+ context 'when using Forever.date' do
+ let(:deploy_token) { create(:deploy_token, expires_at: nil) }
+
+ it 'should return nil' do
+ expect(deploy_token.expires_at).to be_nil
+ end
+ end
+
+ context 'when using a personalized date' do
+ let(:expires_at) { Date.today + 5.months }
+ let(:deploy_token) { create(:deploy_token, expires_at: expires_at) }
+
+ it 'should return the personalized date' do
+ expect(deploy_token.expires_at).to eq(expires_at)
+ end
+ end
+ end
+
+ describe '#expires_at=' do
+ context 'when passing nil' do
+ let(:deploy_token) { create(:deploy_token, expires_at: nil) }
+
+ it 'should assign Forever.date' do
+ expect(deploy_token.read_attribute(:expires_at)).to eq(Forever.date)
+ end
+ end
+
+ context 'when passign a value' do
+ let(:expires_at) { Date.today + 5.months }
+ let(:deploy_token) { create(:deploy_token, expires_at: expires_at) }
+
+ it 'should respect the value' do
+ expect(deploy_token.read_attribute(:expires_at)).to eq(expires_at)
+ end
+ end
+ end
+end
diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb
index 412eca4a56b..56161bfcc28 100644
--- a/spec/models/environment_spec.rb
+++ b/spec/models/environment_spec.rb
@@ -368,6 +368,32 @@ describe Environment do
end
end
+ describe '#deployment_platform' do
+ context 'when there is a deployment platform for environment' do
+ let!(:cluster) do
+ create(:cluster, :provided_by_gcp,
+ environment_scope: '*', projects: [project])
+ end
+
+ it 'finds a deployment platform' do
+ expect(environment.deployment_platform).to eq cluster.platform
+ end
+ end
+
+ context 'when there is no deployment platform for environment' do
+ it 'returns nil' do
+ expect(environment.deployment_platform).to be_nil
+ end
+ end
+
+ it 'checks deployment platforms associated with a project' do
+ expect(project).to receive(:deployment_platform)
+ .with(environment: environment.name)
+
+ environment.deployment_platform
+ end
+ end
+
describe '#terminals' do
subject { environment.terminals }
diff --git a/spec/models/internal_id_spec.rb b/spec/models/internal_id_spec.rb
index 581fd0293cc..8ef91e8fab5 100644
--- a/spec/models/internal_id_spec.rb
+++ b/spec/models/internal_id_spec.rb
@@ -5,7 +5,7 @@ describe InternalId do
let(:usage) { :issues }
let(:issue) { build(:issue, project: project) }
let(:scope) { { project: project } }
- let(:init) { ->(s) { s.project.issues.size } }
+ let(:init) { ->(s) { s.project.issues.maximum(:iid) } }
context 'validations' do
it { is_expected.to validate_presence_of(:usage) }
@@ -39,6 +39,29 @@ describe InternalId do
end
end
+ context 'with an InternalId record present and existing issues with a higher internal id' do
+ # This can happen if the old NonatomicInternalId is still in use
+ before do
+ issues = Array.new(rand(1..10)).map { create(:issue, project: project) }
+
+ issue = issues.last
+ issue.iid = issues.map { |i| i.iid }.max + 1
+ issue.save
+ end
+
+ let(:maximum_iid) { project.issues.map { |i| i.iid }.max }
+
+ it 'updates last_value to the maximum internal id present' do
+ subject
+
+ expect(described_class.find_by(project: project, usage: described_class.usages[usage.to_s]).last_value).to eq(maximum_iid + 1)
+ end
+
+ it 'returns next internal id correctly' do
+ expect(subject).to eq(maximum_iid + 1)
+ end
+ end
+
context 'with concurrent inserts on table' do
it 'looks up the record if it was created concurrently' do
args = { **scope, usage: described_class.usages[usage.to_s] }
@@ -81,7 +104,8 @@ describe InternalId do
describe '#increment_and_save!' do
let(:id) { create(:internal_id) }
- subject { id.increment_and_save! }
+ let(:maximum_iid) { nil }
+ subject { id.increment_and_save!(maximum_iid) }
it 'returns incremented iid' do
value = id.last_value
@@ -102,5 +126,14 @@ describe InternalId do
expect(subject).to eq(1)
end
end
+
+ context 'with maximum_iid given' do
+ let(:id) { create(:internal_id, last_value: 1) }
+ let(:maximum_iid) { id.last_value + 10 }
+
+ it 'returns maximum_iid instead' do
+ expect(subject).to eq(12)
+ end
+ end
end
end
diff --git a/spec/models/merge_request_diff_commit_spec.rb b/spec/models/merge_request_diff_commit_spec.rb
index 7709cf43200..8c01a7ac18f 100644
--- a/spec/models/merge_request_diff_commit_spec.rb
+++ b/spec/models/merge_request_diff_commit_spec.rb
@@ -36,7 +36,7 @@ describe MergeRequestDiffCommit do
"committer_email": "dmitriy.zaporozhets@gmail.com",
"merge_request_diff_id": merge_request_diff_id,
"relative_order": 0,
- "sha": sha_attribute.type_cast_for_database('5937ac0a7beb003549fc5fd26fc247adbce4a52e')
+ "sha": sha_attribute.serialize("5937ac0a7beb003549fc5fd26fc247adbce4a52e")
},
{
"message": "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets \u003cdmitriy.zaporozhets@gmail.com\u003e\n",
@@ -48,7 +48,7 @@ describe MergeRequestDiffCommit do
"committer_email": "dmitriy.zaporozhets@gmail.com",
"merge_request_diff_id": merge_request_diff_id,
"relative_order": 1,
- "sha": sha_attribute.type_cast_for_database('570e7b2abdd848b95f2f578043fc23bd6f6fd24d')
+ "sha": sha_attribute.serialize("570e7b2abdd848b95f2f578043fc23bd6f6fd24d")
}
]
end
@@ -79,7 +79,7 @@ describe MergeRequestDiffCommit do
"committer_email": "alejorro70@gmail.com",
"merge_request_diff_id": merge_request_diff_id,
"relative_order": 0,
- "sha": sha_attribute.type_cast_for_database('ba3343bc4fa403a8dfbfcab7fc1a8c29ee34bd69')
+ "sha": sha_attribute.serialize("ba3343bc4fa403a8dfbfcab7fc1a8c29ee34bd69")
}]
end
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index c853f707e6d..86962cd8d61 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -191,6 +191,21 @@ describe Note do
end
end
+ describe "confidential?" do
+ it "delegates to noteable" do
+ issue_note = build(:note, :on_issue)
+ confidential_note = build(:note, noteable: create(:issue, confidential: true))
+
+ expect(issue_note.confidential?).to be_falsy
+ expect(confidential_note.confidential?).to be_truthy
+ end
+
+ it "is falsey when noteable can't be confidential" do
+ commit_note = build(:note_on_commit)
+ expect(commit_note.confidential?).to be_falsy
+ end
+ end
+
describe "cross_reference_not_visible_for?" do
let(:private_user) { create(:user) }
let(:private_project) { create(:project, namespace: private_user.namespace) { |p| p.add_master(private_user) } }
diff --git a/spec/models/project_deploy_token_spec.rb b/spec/models/project_deploy_token_spec.rb
new file mode 100644
index 00000000000..9e2e40c2e8f
--- /dev/null
+++ b/spec/models/project_deploy_token_spec.rb
@@ -0,0 +1,14 @@
+require 'rails_helper'
+
+RSpec.describe ProjectDeployToken, type: :model do
+ let(:project) { create(:project) }
+ let(:deploy_token) { create(:deploy_token) }
+ subject(:project_deploy_token) { create(:project_deploy_token, project: project, deploy_token: deploy_token) }
+
+ it { is_expected.to belong_to :project }
+ it { is_expected.to belong_to :deploy_token }
+
+ it { is_expected.to validate_presence_of :deploy_token }
+ it { is_expected.to validate_presence_of :project }
+ it { is_expected.to validate_uniqueness_of(:deploy_token_id).scoped_to(:project_id) }
+end
diff --git a/spec/models/project_services/hipchat_service_spec.rb b/spec/models/project_services/hipchat_service_spec.rb
index 3e2a166cdd6..0cd712e2f40 100644
--- a/spec/models/project_services/hipchat_service_spec.rb
+++ b/spec/models/project_services/hipchat_service_spec.rb
@@ -253,6 +253,21 @@ describe HipchatService do
"#{title}" \
"
issue note
")
end
+
+ context 'with confidential issue' do
+ before do
+ issue.update!(confidential: true)
+ end
+
+ it 'calls Hipchat API with issue comment' do
+ data = Gitlab::DataBuilder::Note.build(issue_note, user)
+ hipchat.execute(data)
+
+ message = hipchat.send(:create_message, data)
+
+ expect(message).to include("
issue note
")
+ end
+ end
end
context 'when snippet comment event triggered' do
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index fef868ac0f2..2675c2f52c1 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -84,6 +84,8 @@ describe Project do
it { is_expected.to have_many(:custom_attributes).class_name('ProjectCustomAttribute') }
it { is_expected.to have_many(:project_badges).class_name('ProjectBadge') }
it { is_expected.to have_many(:lfs_file_locks) }
+ it { is_expected.to have_many(:project_deploy_tokens) }
+ it { is_expected.to have_many(:deploy_tokens).through(:project_deploy_tokens) }
context 'after initialized' do
it "has a project_feature" do
@@ -1645,7 +1647,7 @@ describe Project do
before do
allow_any_instance_of(Gitlab::Shell).to receive(:import_repository)
- .with(project.repository_storage_path, project.disk_path, project.import_url)
+ .with(project.repository_storage, project.disk_path, project.import_url)
.and_return(true)
expect_any_instance_of(Repository).to receive(:after_import)
@@ -1798,10 +1800,7 @@ describe Project do
let(:project) { forked_project_link.forked_to_project }
it 'schedules a RepositoryForkWorker job' do
- expect(RepositoryForkWorker).to receive(:perform_async).with(
- project.id,
- forked_from_project.repository_storage_path,
- forked_from_project.disk_path).and_return(import_jid)
+ expect(RepositoryForkWorker).to receive(:perform_async).with(project.id).and_return(import_jid)
expect(project.add_import_job).to eq(import_jid)
end
@@ -2025,6 +2024,22 @@ describe Project do
expect(forked_project.lfs_storage_project).to eq forked_project
end
end
+
+ describe '#all_lfs_objects' do
+ let(:lfs_object) { create(:lfs_object) }
+
+ before do
+ project.lfs_objects << lfs_object
+ end
+
+ it 'returns the lfs object for a project' do
+ expect(project.all_lfs_objects).to contain_exactly(lfs_object)
+ end
+
+ it 'returns the lfs object for a fork' do
+ expect(forked_project.all_lfs_objects).to contain_exactly(lfs_object)
+ end
+ end
end
describe '#pushes_since_gc' do
@@ -3230,6 +3245,7 @@ describe Project do
expect(project).to receive(:update_project_counter_caches)
expect(project).to receive(:remove_import_jid)
expect(project).to receive(:after_create_default_branch)
+ expect(project).to receive(:refresh_markdown_cache!)
project.after_import
end
diff --git a/spec/models/project_wiki_spec.rb b/spec/models/project_wiki_spec.rb
index d87c1ca14f0..374a157bec0 100644
--- a/spec/models/project_wiki_spec.rb
+++ b/spec/models/project_wiki_spec.rb
@@ -172,11 +172,12 @@ describe ProjectWiki do
describe '#find_file' do
shared_examples 'finding a wiki file' do
+ let(:image) { File.open(Rails.root.join('spec', 'fixtures', 'big-image.png')) }
+
before do
- file = File.open(Rails.root.join('spec', 'fixtures', 'dk.png'))
subject.wiki # Make sure the wiki repo exists
- BareRepoOperations.new(subject.repository.path_to_repo).commit_file(file, 'image.png')
+ BareRepoOperations.new(subject.repository.path_to_repo).commit_file(image, 'image.png')
end
it 'returns the latest version of the file if it exists' do
@@ -192,6 +193,13 @@ describe ProjectWiki do
file = subject.find_file('image.png')
expect(file).to be_a Gitlab::Git::WikiFile
end
+
+ it 'returns the whole file' do
+ file = subject.find_file('image.png')
+ image.rewind
+
+ expect(file.raw_data.b).to eq(image.read.b)
+ end
end
context 'when Gitaly wiki_find_file is enabled' do
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 60ab52565cb..e45fe7db1e7 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1437,6 +1437,12 @@ describe Repository do
repository.expire_emptiness_caches
end
+
+ it 'expires the memoized repository cache' do
+ allow(repository.raw_repository).to receive(:expire_has_local_branches_cache).and_call_original
+
+ repository.expire_emptiness_caches
+ end
end
describe 'skip_merges option' do
diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb
index 83ed3b203e6..28c908ea425 100644
--- a/spec/models/service_spec.rb
+++ b/spec/models/service_spec.rb
@@ -10,6 +10,22 @@ describe Service do
it { is_expected.to validate_presence_of(:type) }
end
+ describe 'Scopes' do
+ describe '.confidential_note_hooks' do
+ it 'includes services where confidential_note_events is true' do
+ create(:service, active: true, confidential_note_events: true)
+
+ expect(described_class.confidential_note_hooks.count).to eq 1
+ end
+
+ it 'excludes services where confidential_note_events is false' do
+ create(:service, active: true, confidential_note_events: false)
+
+ expect(described_class.confidential_note_hooks.count).to eq 0
+ end
+ end
+ end
+
describe "Test Button" do
describe '#can_test?' do
let(:service) { create(:service, project: project) }
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 100418da804..35db7616efb 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -1451,7 +1451,7 @@ describe User do
end
end
- describe '#sort' do
+ describe '#sort_by_attribute' do
before do
described_class.delete_all
@user = create :user, created_at: Date.today, current_sign_in_at: Date.today, name: 'Alpha'
@@ -1460,7 +1460,7 @@ describe User do
end
context 'when sort by recent_sign_in' do
- let(:users) { described_class.sort('recent_sign_in') }
+ let(:users) { described_class.sort_by_attribute('recent_sign_in') }
it 'sorts users by recent sign-in time' do
expect(users.first).to eq(@user)
@@ -1473,7 +1473,7 @@ describe User do
end
context 'when sort by oldest_sign_in' do
- let(:users) { described_class.sort('oldest_sign_in') }
+ let(:users) { described_class.sort_by_attribute('oldest_sign_in') }
it 'sorts users by the oldest sign-in time' do
expect(users.first).to eq(@user1)
@@ -1486,15 +1486,15 @@ describe User do
end
it 'sorts users in descending order by their creation time' do
- expect(described_class.sort('created_desc').first).to eq(@user)
+ expect(described_class.sort_by_attribute('created_desc').first).to eq(@user)
end
it 'sorts users in ascending order by their creation time' do
- expect(described_class.sort('created_asc').first).to eq(@user2)
+ expect(described_class.sort_by_attribute('created_asc').first).to eq(@user2)
end
it 'sorts users by id in descending order when nil is passed' do
- expect(described_class.sort(nil).first).to eq(@user2)
+ expect(described_class.sort_by_attribute(nil).first).to eq(@user2)
end
end
@@ -1850,6 +1850,21 @@ describe User do
it_behaves_like :member
end
+
+ context 'with subgroup with different owner for project runner', :nested_groups do
+ let(:group) { create(:group) }
+ let(:another_user) { create(:user) }
+ let(:subgroup) { create(:group, parent: group) }
+ let(:project) { create(:project, group: subgroup) }
+
+ def add_user(access)
+ group.add_user(user, access)
+ group.add_user(another_user, :owner)
+ subgroup.add_user(another_user, :owner)
+ end
+
+ it_behaves_like :member
+ end
end
describe '#projects_with_reporter_access_limited_to' do
@@ -2071,6 +2086,8 @@ describe User do
expect(ghost).to be_ghost
expect(ghost).to be_persisted
+ expect(ghost.namespace).not_to be_nil
+ expect(ghost.namespace).to be_persisted
end
it "does not create a second ghost user if one is already present" do
@@ -2232,6 +2249,20 @@ describe User do
end
end
+ context '#invalidate_personal_projects_count' do
+ let(:user) { build_stubbed(:user) }
+
+ it 'invalidates cache for personal projects counter' do
+ cache_mock = double
+
+ expect(cache_mock).to receive(:delete).with(['users', user.id, 'personal_projects_count'])
+
+ allow(Rails).to receive(:cache).and_return(cache_mock)
+
+ user.invalidate_personal_projects_count
+ end
+ end
+
describe '#allow_password_authentication_for_web?' do
context 'regular user' do
let(:user) { build(:user) }
@@ -2281,11 +2312,9 @@ describe User do
user = build(:user)
projects = double(:projects, count: 1)
- expect(user).to receive(:personal_projects).once.and_return(projects)
+ expect(user).to receive(:personal_projects).and_return(projects)
- 2.times do
- expect(user.personal_projects_count).to eq(1)
- end
+ expect(user.personal_projects_count).to eq(1)
end
end
diff --git a/spec/policies/deploy_token_policy_spec.rb b/spec/policies/deploy_token_policy_spec.rb
new file mode 100644
index 00000000000..eea287d895e
--- /dev/null
+++ b/spec/policies/deploy_token_policy_spec.rb
@@ -0,0 +1,45 @@
+require 'spec_helper'
+
+describe DeployTokenPolicy do
+ let(:current_user) { create(:user) }
+ let(:project) { create(:project) }
+ let(:deploy_token) { create(:deploy_token, projects: [project]) }
+
+ subject { described_class.new(current_user, deploy_token) }
+
+ describe 'creating a deploy key' do
+ context 'when user is master' do
+ before do
+ project.add_master(current_user)
+ end
+
+ it { is_expected.to be_allowed(:create_deploy_token) }
+ end
+
+ context 'when user is not master' do
+ before do
+ project.add_developer(current_user)
+ end
+
+ it { is_expected.to be_disallowed(:create_deploy_token) }
+ end
+ end
+
+ describe 'updating a deploy key' do
+ context 'when user is master' do
+ before do
+ project.add_master(current_user)
+ end
+
+ it { is_expected.to be_allowed(:update_deploy_token) }
+ end
+
+ context 'when user is not master' do
+ before do
+ project.add_developer(current_user)
+ end
+
+ it { is_expected.to be_disallowed(:update_deploy_token) }
+ end
+ end
+end
diff --git a/spec/policies/note_policy_spec.rb b/spec/policies/note_policy_spec.rb
index 58d36a2c84e..e8096358f7d 100644
--- a/spec/policies/note_policy_spec.rb
+++ b/spec/policies/note_policy_spec.rb
@@ -18,7 +18,6 @@ describe NotePolicy, mdoels: true do
context 'when the project is public' do
context 'when the note author is not a project member' do
it 'can edit a note' do
- expect(policies).to be_allowed(:update_note)
expect(policies).to be_allowed(:admin_note)
expect(policies).to be_allowed(:resolve_note)
expect(policies).to be_allowed(:read_note)
@@ -29,7 +28,6 @@ describe NotePolicy, mdoels: true do
it 'can edit note' do
policies = policies(create(:project_snippet, project: project))
- expect(policies).to be_allowed(:update_note)
expect(policies).to be_allowed(:admin_note)
expect(policies).to be_allowed(:resolve_note)
expect(policies).to be_allowed(:read_note)
@@ -47,7 +45,6 @@ describe NotePolicy, mdoels: true do
end
it 'can edit a note' do
- expect(policies).to be_allowed(:update_note)
expect(policies).to be_allowed(:admin_note)
expect(policies).to be_allowed(:resolve_note)
expect(policies).to be_allowed(:read_note)
@@ -56,7 +53,6 @@ describe NotePolicy, mdoels: true do
context 'when the note author is not a project member' do
it 'can not edit a note' do
- expect(policies).to be_disallowed(:update_note)
expect(policies).to be_disallowed(:admin_note)
expect(policies).to be_disallowed(:resolve_note)
end
diff --git a/spec/policies/personal_snippet_policy_spec.rb b/spec/policies/personal_snippet_policy_spec.rb
index 50bb0899eba..3809692b373 100644
--- a/spec/policies/personal_snippet_policy_spec.rb
+++ b/spec/policies/personal_snippet_policy_spec.rb
@@ -27,6 +27,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_allowed(:read_personal_snippet)
is_expected.to be_disallowed(:comment_personal_snippet)
+ is_expected.to be_disallowed(:award_emoji)
is_expected.to be_disallowed(*author_permissions)
end
end
@@ -37,6 +38,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_allowed(:read_personal_snippet)
is_expected.to be_allowed(:comment_personal_snippet)
+ is_expected.to be_allowed(:award_emoji)
is_expected.to be_disallowed(*author_permissions)
end
end
@@ -47,6 +49,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_allowed(:read_personal_snippet)
is_expected.to be_allowed(:comment_personal_snippet)
+ is_expected.to be_allowed(:award_emoji)
is_expected.to be_allowed(*author_permissions)
end
end
@@ -61,6 +64,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_disallowed(:read_personal_snippet)
is_expected.to be_disallowed(:comment_personal_snippet)
+ is_expected.to be_disallowed(:award_emoji)
is_expected.to be_disallowed(*author_permissions)
end
end
@@ -71,6 +75,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_allowed(:read_personal_snippet)
is_expected.to be_allowed(:comment_personal_snippet)
+ is_expected.to be_allowed(:award_emoji)
is_expected.to be_disallowed(*author_permissions)
end
end
@@ -81,6 +86,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_disallowed(:read_personal_snippet)
is_expected.to be_disallowed(:comment_personal_snippet)
+ is_expected.to be_disallowed(:award_emoji)
is_expected.to be_disallowed(*author_permissions)
end
end
@@ -91,6 +97,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_allowed(:read_personal_snippet)
is_expected.to be_allowed(:comment_personal_snippet)
+ is_expected.to be_allowed(:award_emoji)
is_expected.to be_allowed(*author_permissions)
end
end
@@ -105,6 +112,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_disallowed(:read_personal_snippet)
is_expected.to be_disallowed(:comment_personal_snippet)
+ is_expected.to be_disallowed(:award_emoji)
is_expected.to be_disallowed(*author_permissions)
end
end
@@ -115,6 +123,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_disallowed(:read_personal_snippet)
is_expected.to be_disallowed(:comment_personal_snippet)
+ is_expected.to be_disallowed(:award_emoji)
is_expected.to be_disallowed(*author_permissions)
end
end
@@ -125,6 +134,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_disallowed(:read_personal_snippet)
is_expected.to be_disallowed(:comment_personal_snippet)
+ is_expected.to be_disallowed(:award_emoji)
is_expected.to be_disallowed(*author_permissions)
end
end
@@ -135,6 +145,7 @@ describe PersonalSnippetPolicy do
it do
is_expected.to be_allowed(:read_personal_snippet)
is_expected.to be_allowed(:comment_personal_snippet)
+ is_expected.to be_allowed(:award_emoji)
is_expected.to be_allowed(*author_permissions)
end
end
diff --git a/spec/policies/project_policy_spec.rb b/spec/policies/project_policy_spec.rb
index ea76e604153..8b9c4ac0b4b 100644
--- a/spec/policies/project_policy_spec.rb
+++ b/spec/policies/project_policy_spec.rb
@@ -11,10 +11,11 @@ describe ProjectPolicy do
let(:base_guest_permissions) do
%i[
- read_project read_board read_list read_wiki read_issue read_label
- read_milestone read_project_snippet read_project_member
- read_note create_project create_issue create_note
- upload_file
+ read_project read_board read_list read_wiki read_issue
+ read_project_for_iids read_issue_iid read_merge_request_iid read_label
+ read_milestone read_project_snippet read_project_member read_note
+ create_project create_issue create_note upload_file create_merge_request_in
+ award_emoji
]
end
@@ -35,7 +36,7 @@ describe ProjectPolicy do
%i[
admin_milestone admin_merge_request update_merge_request create_commit_status
update_commit_status create_build update_build create_pipeline
- update_pipeline create_merge_request create_wiki push_code
+ update_pipeline create_merge_request_from create_wiki push_code
resolve_note create_container_image update_container_image
create_environment create_deployment
]
@@ -43,7 +44,7 @@ describe ProjectPolicy do
let(:base_master_permissions) do
%i[
- delete_protected_branch update_project_snippet update_environment
+ push_to_delete_protected_branch update_project_snippet update_environment
update_deployment admin_project_snippet
admin_project_member admin_note admin_wiki admin_project
admin_commit_status admin_build admin_container_image
@@ -120,7 +121,7 @@ describe ProjectPolicy do
project.issues_enabled = false
project.save!
- expect_disallowed :read_issue, :create_issue, :update_issue, :admin_issue
+ expect_disallowed :read_issue, :read_issue_iid, :create_issue, :update_issue, :admin_issue
end
end
@@ -131,7 +132,60 @@ describe ProjectPolicy do
project.issues_enabled = false
project.save!
- expect_disallowed :read_issue, :create_issue, :update_issue, :admin_issue
+ expect_disallowed :read_issue, :read_issue_iid, :create_issue, :update_issue, :admin_issue
+ end
+ end
+ end
+
+ context 'merge requests feature' do
+ subject { described_class.new(owner, project) }
+
+ it 'disallows all permissions when the feature is disabled' do
+ project.project_feature.update(merge_requests_access_level: ProjectFeature::DISABLED)
+
+ mr_permissions = [:create_merge_request_from, :read_merge_request,
+ :update_merge_request, :admin_merge_request,
+ :create_merge_request_in]
+
+ expect_disallowed(*mr_permissions)
+ end
+ end
+
+ shared_examples 'archived project policies' do
+ let(:feature_write_abilities) do
+ described_class::READONLY_FEATURES_WHEN_ARCHIVED.flat_map do |feature|
+ described_class.create_update_admin_destroy(feature)
+ end
+ end
+
+ let(:other_write_abilities) do
+ %i[
+ create_merge_request_in
+ create_merge_request_from
+ push_to_delete_protected_branch
+ push_code
+ request_access
+ upload_file
+ resolve_note
+ award_emoji
+ ]
+ end
+
+ context 'when the project is archived' do
+ before do
+ project.archived = true
+ end
+
+ it 'disables write actions on all relevant project features' do
+ expect_disallowed(*feature_write_abilities)
+ end
+
+ it 'disables some other important write actions' do
+ expect_disallowed(*other_write_abilities)
+ end
+
+ it 'does not disable other other abilities' do
+ expect_allowed(*(regular_abilities - feature_write_abilities - other_write_abilities))
end
end
end
@@ -141,8 +195,8 @@ describe ProjectPolicy do
context 'when a project has pending invites' do
let(:group) { create(:group, :public) }
let(:project) { create(:project, :public, namespace: group) }
- let(:user_permissions) { [:create_project, :create_issue, :create_note, :upload_file] }
- let(:anonymous_permissions) { guest_permissions - user_permissions }
+ let(:user_permissions) { [:create_merge_request_in, :create_project, :create_issue, :create_note, :upload_file, :award_emoji] }
+ let(:anonymous_permissions) { guest_permissions - user_permissions }
subject { described_class.new(nil, project) }
@@ -154,6 +208,10 @@ describe ProjectPolicy do
expect_allowed(*anonymous_permissions)
expect_disallowed(*user_permissions)
end
+
+ it_behaves_like 'archived project policies' do
+ let(:regular_abilities) { anonymous_permissions }
+ end
end
end
@@ -184,6 +242,10 @@ describe ProjectPolicy do
expect_disallowed(*owner_permissions)
end
+ it_behaves_like 'archived project policies' do
+ let(:regular_abilities) { guest_permissions }
+ end
+
context 'public builds enabled' do
it do
expect_allowed(*guest_permissions)
@@ -224,12 +286,15 @@ describe ProjectPolicy do
it do
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
- expect_allowed(*reporter_permissions)
expect_allowed(*team_member_reporter_permissions)
expect_disallowed(*developer_permissions)
expect_disallowed(*master_permissions)
expect_disallowed(*owner_permissions)
end
+
+ it_behaves_like 'archived project policies' do
+ let(:regular_abilities) { reporter_permissions }
+ end
end
end
@@ -247,6 +312,10 @@ describe ProjectPolicy do
expect_disallowed(*master_permissions)
expect_disallowed(*owner_permissions)
end
+
+ it_behaves_like 'archived project policies' do
+ let(:regular_abilities) { developer_permissions }
+ end
end
end
@@ -264,6 +333,10 @@ describe ProjectPolicy do
expect_allowed(*master_permissions)
expect_disallowed(*owner_permissions)
end
+
+ it_behaves_like 'archived project policies' do
+ let(:regular_abilities) { master_permissions }
+ end
end
end
@@ -281,6 +354,10 @@ describe ProjectPolicy do
expect_allowed(*master_permissions)
expect_allowed(*owner_permissions)
end
+
+ it_behaves_like 'archived project policies' do
+ let(:regular_abilities) { owner_permissions }
+ end
end
end
@@ -298,6 +375,10 @@ describe ProjectPolicy do
expect_allowed(*master_permissions)
expect_allowed(*owner_permissions)
end
+
+ it_behaves_like 'archived project policies' do
+ let(:regular_abilities) { owner_permissions }
+ end
end
end
diff --git a/spec/presenters/ci/build_presenter_spec.rb b/spec/presenters/ci/build_presenter_spec.rb
index 1a8001be6ab..cc16d0f156b 100644
--- a/spec/presenters/ci/build_presenter_spec.rb
+++ b/spec/presenters/ci/build_presenter_spec.rb
@@ -72,13 +72,44 @@ describe Ci::BuildPresenter do
end
end
- context 'when build is not auto-canceled' do
- before do
- expect(build).to receive(:auto_canceled?).and_return(false)
- end
+ context 'when build failed' do
+ let(:build) { create(:ci_build, :failed, pipeline: pipeline) }
- it 'does not have a status title' do
- expect(presenter.status_title).to be_nil
+ it 'returns the reason of failure' do
+ status_title = presenter.status_title
+
+ expect(status_title).to eq('Failed (unknown failure)')
+ end
+ end
+
+ context 'when build has failed && retried' do
+ let(:build) { create(:ci_build, :failed, :retried, pipeline: pipeline) }
+
+ it 'does not include retried title' do
+ status_title = presenter.status_title
+
+ expect(status_title).not_to include('(retried)')
+ expect(status_title).to eq('Failed (unknown failure)')
+ end
+ end
+
+ context 'when build has failed and is allowed to' do
+ let(:build) { create(:ci_build, :failed, :allowed_to_fail, pipeline: pipeline) }
+
+ it 'returns the reason of failure' do
+ status_title = presenter.status_title
+
+ expect(status_title).to eq('Failed (unknown failure)')
+ end
+ end
+
+ context 'For any other build' do
+ let(:build) { create(:ci_build, :success, pipeline: pipeline) }
+
+ it 'returns the status' do
+ tooltip_description = presenter.status_title
+
+ expect(tooltip_description).to eq('Success')
end
end
end
@@ -134,4 +165,56 @@ describe Ci::BuildPresenter do
end
end
end
+
+ describe '#tooltip_message' do
+ context 'When build has failed' do
+ let(:build) { create(:ci_build, :script_failure, pipeline: pipeline) }
+
+ it 'returns the reason of failure' do
+ tooltip = subject.tooltip_message
+
+ expect(tooltip).to eq("#{build.name} - failed (script failure)")
+ end
+ end
+
+ context 'When build has failed and retried' do
+ let(:build) { create(:ci_build, :script_failure, :retried, pipeline: pipeline) }
+
+ it 'should include the reason of failure and the retried title' do
+ tooltip = subject.tooltip_message
+
+ expect(tooltip).to eq("#{build.name} - failed (script failure) (retried)")
+ end
+ end
+
+ context 'When build has failed and is allowed to' do
+ let(:build) { create(:ci_build, :script_failure, :allowed_to_fail, pipeline: pipeline) }
+
+ it 'should include the reason of failure' do
+ tooltip = subject.tooltip_message
+
+ expect(tooltip).to eq("#{build.name} - failed (script failure) (allowed to fail)")
+ end
+ end
+
+ context 'For any other build (no retried)' do
+ let(:build) { create(:ci_build, :success, pipeline: pipeline) }
+
+ it 'should include build name and status' do
+ tooltip = subject.tooltip_message
+
+ expect(tooltip).to eq("#{build.name} - passed")
+ end
+ end
+
+ context 'For any other build (retried)' do
+ let(:build) { create(:ci_build, :success, :retried, pipeline: pipeline) }
+
+ it 'should include build name and status' do
+ tooltip = subject.tooltip_message
+
+ expect(tooltip).to eq("#{build.name} - passed (retried)")
+ end
+ end
+ end
end
diff --git a/spec/requests/api/boards_spec.rb b/spec/requests/api/boards_spec.rb
index c6c10025f7f..92b614b087e 100644
--- a/spec/requests/api/boards_spec.rb
+++ b/spec/requests/api/boards_spec.rb
@@ -48,5 +48,36 @@ describe API::Boards do
expect(json_response['label']['name']).to eq(group_label.title)
expect(json_response['position']).to eq(3)
end
+
+ it 'creates a new board list for ancestor group labels' do
+ group = create(:group)
+ sub_group = create(:group, parent: group)
+ group_label = create(:group_label, group: group)
+ board_parent.update(group: sub_group)
+ group.add_developer(user)
+ sub_group.add_developer(user)
+
+ post api(url, user), label_id: group_label.id
+
+ expect(response).to have_gitlab_http_status(201)
+ expect(json_response['label']['name']).to eq(group_label.title)
+ end
+ end
+
+ describe "POST /groups/:id/boards/lists", :nested_groups do
+ set(:group) { create(:group) }
+ set(:board_parent) { create(:group, parent: group ) }
+ let(:url) { "/groups/#{board_parent.id}/boards/#{board.id}/lists" }
+ set(:board) { create(:board, group: board_parent) }
+
+ it 'creates a new board list for ancestor group labels' do
+ group.add_developer(user)
+ group_label = create(:group_label, group: group)
+
+ post api(url, user), label_id: group_label.id
+
+ expect(response).to have_gitlab_http_status(201)
+ expect(json_response['label']['name']).to eq(group_label.title)
+ end
end
end
diff --git a/spec/requests/api/features_spec.rb b/spec/requests/api/features_spec.rb
index 267058d98ee..c5354c2d639 100644
--- a/spec/requests/api/features_spec.rb
+++ b/spec/requests/api/features_spec.rb
@@ -1,8 +1,8 @@
require 'spec_helper'
describe API::Features do
- let(:user) { create(:user) }
- let(:admin) { create(:admin) }
+ set(:user) { create(:user) }
+ set(:admin) { create(:admin) }
before do
Flipper.unregister_groups
@@ -249,4 +249,43 @@ describe API::Features do
end
end
end
+
+ describe 'DELETE /feature/:name' do
+ let(:feature_name) { 'my_feature' }
+
+ context 'when the user has no access' do
+ it 'returns a 401 for anonymous users' do
+ delete api("/features/#{feature_name}")
+
+ expect(response).to have_gitlab_http_status(401)
+ end
+
+ it 'returns a 403 for users' do
+ delete api("/features/#{feature_name}", user)
+
+ expect(response).to have_gitlab_http_status(403)
+ end
+ end
+
+ context 'when the user has access' do
+ it 'returns 204 when the value is not set' do
+ delete api("/features/#{feature_name}", admin)
+
+ expect(response).to have_gitlab_http_status(204)
+ end
+
+ context 'when the gate value was set' do
+ before do
+ Feature.get(feature_name).enable
+ end
+
+ it 'deletes an enabled feature' do
+ delete api("/features/#{feature_name}", admin)
+
+ expect(response).to have_gitlab_http_status(204)
+ expect(Feature.get(feature_name)).not_to be_enabled
+ end
+ end
+ end
+ end
end
diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb
index 6614e8cea43..90f9c4ad214 100644
--- a/spec/requests/api/issues_spec.rb
+++ b/spec/requests/api/issues_spec.rb
@@ -384,6 +384,30 @@ describe API::Issues do
end
let(:base_url) { "/groups/#{group.id}/issues" }
+ context 'when group has subgroups', :nested_groups do
+ let(:subgroup_1) { create(:group, parent: group) }
+ let(:subgroup_2) { create(:group, parent: subgroup_1) }
+
+ let(:subgroup_1_project) { create(:project, namespace: subgroup_1) }
+ let(:subgroup_2_project) { create(:project, namespace: subgroup_2) }
+
+ let!(:issue_1) { create(:issue, project: subgroup_1_project) }
+ let!(:issue_2) { create(:issue, project: subgroup_2_project) }
+
+ before do
+ group.add_developer(user)
+ end
+
+ it 'also returns subgroups projects issues' do
+ get api(base_url, user)
+
+ issue_ids = json_response.map { |issue| issue['id'] }
+
+ expect_paginated_array_response(size: 5)
+ expect(issue_ids).to include(issue_1.id, issue_2.id)
+ end
+ end
+
it 'returns all group issues (including opened and closed)' do
get api(base_url, admin)
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb
index 3764aec0c71..f64623d7018 100644
--- a/spec/requests/api/merge_requests_spec.rb
+++ b/spec/requests/api/merge_requests_spec.rb
@@ -861,7 +861,7 @@ describe API::MergeRequests do
expect(json_response['title']).to eq('Test merge_request')
end
- it 'returns 422 when target project has disabled merge requests' do
+ it 'returns 403 when target project has disabled merge requests' do
project.project_feature.update(merge_requests_access_level: 0)
post api("/projects/#{forked_project.id}/merge_requests", user2),
@@ -871,7 +871,7 @@ describe API::MergeRequests do
author: user2,
target_project_id: project.id
- expect(response).to have_gitlab_http_status(422)
+ expect(response).to have_gitlab_http_status(403)
end
it "returns 400 when source_branch is missing" do
diff --git a/spec/requests/api/pipeline_schedules_spec.rb b/spec/requests/api/pipeline_schedules_spec.rb
index 7ea25059756..91d4d5d3de9 100644
--- a/spec/requests/api/pipeline_schedules_spec.rb
+++ b/spec/requests/api/pipeline_schedules_spec.rb
@@ -17,6 +17,17 @@ describe API::PipelineSchedules do
pipeline_schedule.pipelines << build(:ci_pipeline, project: project)
end
+ def create_pipeline_schedules(count)
+ create_list(:ci_pipeline_schedule, count, project: project)
+ .each do |pipeline_schedule|
+ create(:user).tap do |user|
+ project.add_developer(user)
+ pipeline_schedule.update_attributes(owner: user)
+ end
+ pipeline_schedule.pipelines << build(:ci_pipeline, project: project)
+ end
+ end
+
it 'returns list of pipeline_schedules' do
get api("/projects/#{project.id}/pipeline_schedules", developer)
@@ -26,18 +37,14 @@ describe API::PipelineSchedules do
end
it 'avoids N + 1 queries' do
+ # We need at least two users to trigger a preload for that relation.
+ create_pipeline_schedules(1)
+
control_count = ActiveRecord::QueryRecorder.new do
get api("/projects/#{project.id}/pipeline_schedules", developer)
end.count
- create_list(:ci_pipeline_schedule, 10, project: project)
- .each do |pipeline_schedule|
- create(:user).tap do |user|
- project.add_developer(user)
- pipeline_schedule.update_attributes(owner: user)
- end
- pipeline_schedule.pipelines << build(:ci_pipeline, project: project)
- end
+ create_pipeline_schedules(10)
expect do
get api("/projects/#{project.id}/pipeline_schedules", developer)
diff --git a/spec/requests/api/project_hooks_spec.rb b/spec/requests/api/project_hooks_spec.rb
index 392cad667be..12a183fed1e 100644
--- a/spec/requests/api/project_hooks_spec.rb
+++ b/spec/requests/api/project_hooks_spec.rb
@@ -33,6 +33,7 @@ describe API::ProjectHooks, 'ProjectHooks' do
expect(json_response.first['merge_requests_events']).to eq(true)
expect(json_response.first['tag_push_events']).to eq(true)
expect(json_response.first['note_events']).to eq(true)
+ expect(json_response.first['confidential_note_events']).to eq(true)
expect(json_response.first['job_events']).to eq(true)
expect(json_response.first['pipeline_events']).to eq(true)
expect(json_response.first['wiki_page_events']).to eq(true)
@@ -62,6 +63,7 @@ describe API::ProjectHooks, 'ProjectHooks' do
expect(json_response['merge_requests_events']).to eq(hook.merge_requests_events)
expect(json_response['tag_push_events']).to eq(hook.tag_push_events)
expect(json_response['note_events']).to eq(hook.note_events)
+ expect(json_response['confidential_note_events']).to eq(hook.confidential_note_events)
expect(json_response['job_events']).to eq(hook.job_events)
expect(json_response['pipeline_events']).to eq(hook.pipeline_events)
expect(json_response['wiki_page_events']).to eq(hook.wiki_page_events)
@@ -104,6 +106,7 @@ describe API::ProjectHooks, 'ProjectHooks' do
expect(json_response['merge_requests_events']).to eq(false)
expect(json_response['tag_push_events']).to eq(false)
expect(json_response['note_events']).to eq(false)
+ expect(json_response['confidential_note_events']).to eq(nil)
expect(json_response['job_events']).to eq(true)
expect(json_response['pipeline_events']).to eq(false)
expect(json_response['wiki_page_events']).to eq(true)
@@ -152,6 +155,7 @@ describe API::ProjectHooks, 'ProjectHooks' do
expect(json_response['merge_requests_events']).to eq(hook.merge_requests_events)
expect(json_response['tag_push_events']).to eq(hook.tag_push_events)
expect(json_response['note_events']).to eq(hook.note_events)
+ expect(json_response['confidential_note_events']).to eq(hook.confidential_note_events)
expect(json_response['job_events']).to eq(hook.job_events)
expect(json_response['pipeline_events']).to eq(hook.pipeline_events)
expect(json_response['wiki_page_events']).to eq(hook.wiki_page_events)
diff --git a/spec/requests/api/project_import_spec.rb b/spec/requests/api/project_import_spec.rb
index 987f6e26971..f68057a92a1 100644
--- a/spec/requests/api/project_import_spec.rb
+++ b/spec/requests/api/project_import_spec.rb
@@ -40,7 +40,7 @@ describe API::ProjectImport do
expect(response).to have_gitlab_http_status(201)
end
- it 'schedules an import at the user namespace level' do
+ it 'does not shedule an import for a nampespace that does not exist' do
expect_any_instance_of(Project).not_to receive(:import_schedule)
expect(::Projects::CreateService).not_to receive(:new)
@@ -71,6 +71,72 @@ describe API::ProjectImport do
expect(json_response['error']).to eq('file is invalid')
end
+ it 'stores params that can be overridden' do
+ stub_import(namespace)
+ override_params = { 'description' => 'Hello world' }
+
+ post api('/projects/import', user),
+ path: 'test-import',
+ file: fixture_file_upload(file),
+ namespace: namespace.id,
+ override_params: override_params
+ import_project = Project.find(json_response['id'])
+
+ expect(import_project.import_data.data['override_params']).to eq(override_params)
+ end
+
+ it 'does not store params that are not allowed' do
+ stub_import(namespace)
+ override_params = { 'not_allowed' => 'Hello world' }
+
+ post api('/projects/import', user),
+ path: 'test-import',
+ file: fixture_file_upload(file),
+ namespace: namespace.id,
+ override_params: override_params
+ import_project = Project.find(json_response['id'])
+
+ expect(import_project.import_data.data['override_params']).to be_empty
+ end
+
+ it 'correctly overrides params during the import' do
+ override_params = { 'description' => 'Hello world' }
+
+ Sidekiq::Testing.inline! do
+ post api('/projects/import', user),
+ path: 'test-import',
+ file: fixture_file_upload(file),
+ namespace: namespace.id,
+ override_params: override_params
+ end
+ import_project = Project.find(json_response['id'])
+
+ expect(import_project.description).to eq('Hello world')
+ end
+
+ context 'when target path already exists in namespace' do
+ let(:existing_project) { create(:project, namespace: user.namespace) }
+
+ it 'does not schedule an import' do
+ expect_any_instance_of(Project).not_to receive(:import_schedule)
+
+ post api('/projects/import', user), path: existing_project.path, file: fixture_file_upload(file)
+
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['message']).to eq('Name has already been taken')
+ end
+
+ context 'when param overwrite is true' do
+ it 'schedules an import' do
+ stub_import(user.namespace)
+
+ post api('/projects/import', user), path: existing_project.path, file: fixture_file_upload(file), overwrite: true
+
+ expect(response).to have_gitlab_http_status(201)
+ end
+ end
+ end
+
def stub_import(namespace)
expect_any_instance_of(Project).to receive(:import_schedule)
expect(::Projects::CreateService).to receive(:new).with(user, hash_including(namespace_id: namespace.id)).and_call_original
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index d73a42f48ad..17272cb00e5 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -1,6 +1,18 @@
# -*- coding: utf-8 -*-
require 'spec_helper'
+shared_examples 'languages and percentages JSON response' do
+ let(:expected_languages) { project.repository.languages.map { |language| language.values_at(:label, :value)}.to_h }
+
+ it 'returns expected language values' do
+ get api("/projects/#{project.id}/languages", user)
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to eq(expected_languages)
+ expect(json_response.count).to be > 1
+ end
+end
+
describe API::Projects do
let(:user) { create(:user) }
let(:user2) { create(:user) }
@@ -452,7 +464,8 @@ describe API::Projects do
only_allow_merge_if_pipeline_succeeds: false,
request_access_enabled: true,
only_allow_merge_if_all_discussions_are_resolved: false,
- ci_config_path: 'a/custom/path'
+ ci_config_path: 'a/custom/path',
+ merge_method: 'ff'
})
post api('/projects', user), project
@@ -569,6 +582,22 @@ describe API::Projects do
expect(json_response['only_allow_merge_if_all_discussions_are_resolved']).to be_truthy
end
+ it 'sets the merge method of a project to rebase merge' do
+ project = attributes_for(:project, merge_method: 'rebase_merge')
+
+ post api('/projects', user), project
+
+ expect(json_response['merge_method']).to eq('rebase_merge')
+ end
+
+ it 'rejects invalid values for merge_method' do
+ project = attributes_for(:project, merge_method: 'totally_not_valid_method')
+
+ post api('/projects', user), project
+
+ expect(response).to have_gitlab_http_status(400)
+ end
+
it 'ignores import_url when it is nil' do
project = attributes_for(:project, import_url: nil)
@@ -823,6 +852,7 @@ describe API::Projects do
expect(json_response['shared_with_groups'][0]['group_access_level']).to eq(link.group_access)
expect(json_response['only_allow_merge_if_pipeline_succeeds']).to eq(project.only_allow_merge_if_pipeline_succeeds)
expect(json_response['only_allow_merge_if_all_discussions_are_resolved']).to eq(project.only_allow_merge_if_all_discussions_are_resolved)
+ expect(json_response['merge_method']).to eq(project.merge_method.to_s)
end
it 'returns a project by path name' do
@@ -1474,6 +1504,26 @@ describe API::Projects do
expect(json_response[k.to_s]).to eq(v)
end
end
+
+ it 'updates merge_method' do
+ project_param = { merge_method: 'ff' }
+
+ put api("/projects/#{project3.id}", user), project_param
+
+ expect(response).to have_gitlab_http_status(200)
+
+ project_param.each_pair do |k, v|
+ expect(json_response[k.to_s]).to eq(v)
+ end
+ end
+
+ it 'rejects to update merge_method when merge_method is invalid' do
+ project_param = { merge_method: 'invalid' }
+
+ put api("/projects/#{project3.id}", user), project_param
+
+ expect(response).to have_gitlab_http_status(400)
+ end
end
context 'when authenticated as project master' do
@@ -1491,6 +1541,7 @@ describe API::Projects do
wiki_enabled: true,
snippets_enabled: true,
merge_requests_enabled: true,
+ merge_method: 'ff',
description: 'new description' }
put api("/projects/#{project3.id}", user4), project_param
@@ -1655,6 +1706,42 @@ describe API::Projects do
end
end
+ describe 'GET /projects/:id/languages' do
+ context 'with an authorized user' do
+ it_behaves_like 'languages and percentages JSON response' do
+ let(:project) { project3 }
+ end
+
+ it 'returns not_found(404) for not existing project' do
+ get api("/projects/9999999999/languages", user)
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+
+ context 'with not authorized user' do
+ it 'returns not_found for existing but unauthorized project' do
+ get api("/projects/#{project3.id}/languages", user3)
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+
+ context 'without user' do
+ let(:project_public) { create(:project, :public, :repository) }
+
+ it_behaves_like 'languages and percentages JSON response' do
+ let(:project) { project_public }
+ end
+
+ it 'returns not_found for existing but unauthorized project' do
+ get api("/projects/#{project3.id}/languages", nil)
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+ end
+
describe 'DELETE /projects/:id' do
context 'when authenticated as user' do
it 'removes project' do
diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb
index 5084b36c761..17c7a511857 100644
--- a/spec/requests/api/runner_spec.rb
+++ b/spec/requests/api/runner_spec.rb
@@ -406,7 +406,7 @@ describe API::Runner do
expect(json_response['image']).to eq({ 'name' => 'ruby:2.1', 'entrypoint' => '/bin/sh' })
expect(json_response['services']).to eq([{ 'name' => 'postgres', 'entrypoint' => nil,
'alias' => nil, 'command' => nil },
- { 'name' => 'docker:dind', 'entrypoint' => '/bin/sh',
+ { 'name' => 'docker:stable-dind', 'entrypoint' => '/bin/sh',
'alias' => 'docker', 'command' => 'sleep 30' }])
expect(json_response['steps']).to eq(expected_steps)
expect(json_response['artifacts']).to eq(expected_artifacts)
@@ -950,12 +950,53 @@ describe API::Runner do
describe 'POST /api/v4/jobs/:id/artifacts/authorize' do
context 'when using token as parameter' do
- it 'authorizes posting artifacts to running job' do
- authorize_artifacts_with_token_in_params
+ context 'posting artifacts to running job' do
+ subject do
+ authorize_artifacts_with_token_in_params
+ end
- expect(response).to have_gitlab_http_status(200)
- expect(response.content_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE)
- expect(json_response['TempPath']).not_to be_nil
+ shared_examples 'authorizes local file' do
+ it 'succeeds' do
+ subject
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response.content_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE)
+ expect(json_response['TempPath']).to eq(JobArtifactUploader.workhorse_local_upload_path)
+ expect(json_response['RemoteObject']).to be_nil
+ end
+ end
+
+ context 'when using local storage' do
+ it_behaves_like 'authorizes local file'
+ end
+
+ context 'when using remote storage' do
+ context 'when direct upload is enabled' do
+ before do
+ stub_artifacts_object_storage(enabled: true, direct_upload: true)
+ end
+
+ it 'succeeds' do
+ subject
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response.content_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE)
+ expect(json_response['TempPath']).to eq(JobArtifactUploader.workhorse_local_upload_path)
+ expect(json_response['RemoteObject']).to have_key('ID')
+ expect(json_response['RemoteObject']).to have_key('GetURL')
+ expect(json_response['RemoteObject']).to have_key('StoreURL')
+ expect(json_response['RemoteObject']).to have_key('DeleteURL')
+ end
+ end
+
+ context 'when direct upload is disabled' do
+ before do
+ stub_artifacts_object_storage(enabled: true, direct_upload: false)
+ end
+
+ it_behaves_like 'authorizes local file'
+ end
+ end
end
it 'fails to post too large artifact' do
@@ -1051,20 +1092,45 @@ describe API::Runner do
end
end
- context 'when uses regular file post' do
- before do
- upload_artifacts(file_upload, headers_with_token, false)
- end
-
- it_behaves_like 'successful artifacts upload'
- end
-
context 'when uses accelerated file post' do
- before do
- upload_artifacts(file_upload, headers_with_token, true)
+ context 'for file stored locally' do
+ before do
+ upload_artifacts(file_upload, headers_with_token)
+ end
+
+ it_behaves_like 'successful artifacts upload'
end
- it_behaves_like 'successful artifacts upload'
+ context 'for file stored remotelly' do
+ let!(:fog_connection) do
+ stub_artifacts_object_storage(direct_upload: true)
+ end
+
+ before do
+ fog_connection.directories.get('artifacts').files.create(
+ key: 'tmp/upload/12312300',
+ body: 'content'
+ )
+
+ upload_artifacts(file_upload, headers_with_token,
+ { 'file.remote_id' => remote_id })
+ end
+
+ context 'when valid remote_id is used' do
+ let(:remote_id) { '12312300' }
+
+ it_behaves_like 'successful artifacts upload'
+ end
+
+ context 'when invalid remote_id is used' do
+ let(:remote_id) { 'invalid id' }
+
+ it 'responds with bad request' do
+ expect(response).to have_gitlab_http_status(500)
+ expect(json_response['message']).to eq("Missing file")
+ end
+ end
+ end
end
context 'when using runners token' do
@@ -1159,11 +1225,13 @@ describe API::Runner do
let!(:artifacts) { file_upload }
let!(:artifacts_sha256) { Digest::SHA256.file(artifacts.path).hexdigest }
let!(:metadata) { file_upload2 }
+ let!(:metadata_sha256) { Digest::SHA256.file(metadata.path).hexdigest }
let(:stored_artifacts_file) { job.reload.artifacts_file.file }
let(:stored_metadata_file) { job.reload.artifacts_metadata.file }
let(:stored_artifacts_size) { job.reload.artifacts_size }
let(:stored_artifacts_sha256) { job.reload.job_artifacts_archive.file_sha256 }
+ let(:stored_metadata_sha256) { job.reload.job_artifacts_metadata.file_sha256 }
before do
post(api("/jobs/#{job.id}/artifacts"), post_data, headers_with_token)
@@ -1175,7 +1243,8 @@ describe API::Runner do
'file.name' => artifacts.original_filename,
'file.sha256' => artifacts_sha256,
'metadata.path' => metadata.path,
- 'metadata.name' => metadata.original_filename }
+ 'metadata.name' => metadata.original_filename,
+ 'metadata.sha256' => metadata_sha256 }
end
it 'stores artifacts and artifacts metadata' do
@@ -1184,6 +1253,7 @@ describe API::Runner do
expect(stored_metadata_file.original_filename).to eq(metadata.original_filename)
expect(stored_artifacts_size).to eq(72821)
expect(stored_artifacts_sha256).to eq(artifacts_sha256)
+ expect(stored_metadata_sha256).to eq(metadata_sha256)
end
end
@@ -1204,15 +1274,19 @@ describe API::Runner do
end
context 'when artifacts are being stored outside of tmp path' do
+ let(:new_tmpdir) { Dir.mktmpdir }
+
before do
+ # init before overwriting tmp dir
+ file_upload
+
# by configuring this path we allow to pass file from @tmpdir only
# but all temporary files are stored in system tmp directory
- @tmpdir = Dir.mktmpdir
- allow(JobArtifactUploader).to receive(:workhorse_upload_path).and_return(@tmpdir)
+ allow(Dir).to receive(:tmpdir).and_return(new_tmpdir)
end
after do
- FileUtils.remove_entry @tmpdir
+ FileUtils.remove_entry(new_tmpdir)
end
it' "fails to post artifacts for outside of tmp path"' do
@@ -1222,12 +1296,11 @@ describe API::Runner do
end
end
- def upload_artifacts(file, headers = {}, accelerated = true)
- params = if accelerated
- { 'file.path' => file.path, 'file.name' => file.original_filename }
- else
- { 'file' => file }
- end
+ def upload_artifacts(file, headers = {}, params = {})
+ params = params.merge({
+ 'file.path' => file.path,
+ 'file.name' => file.original_filename
+ })
post api("/jobs/#{job.id}/artifacts"), params, headers
end
diff --git a/spec/requests/api/v3/merge_requests_spec.rb b/spec/requests/api/v3/merge_requests_spec.rb
index 6b748369f0d..be70cb24dce 100644
--- a/spec/requests/api/v3/merge_requests_spec.rb
+++ b/spec/requests/api/v3/merge_requests_spec.rb
@@ -340,7 +340,7 @@ describe API::MergeRequests do
expect(json_response['title']).to eq('Test merge_request')
end
- it "returns 422 when target project has disabled merge requests" do
+ it "returns 403 when target project has disabled merge requests" do
project.project_feature.update(merge_requests_access_level: 0)
post v3_api("/projects/#{forked_project.id}/merge_requests", user2),
@@ -350,7 +350,7 @@ describe API::MergeRequests do
author: user2,
target_project_id: project.id
- expect(response).to have_gitlab_http_status(422)
+ expect(response).to have_gitlab_http_status(403)
end
it "returns 400 when source_branch is missing" do
diff --git a/spec/requests/lfs_http_spec.rb b/spec/requests/lfs_http_spec.rb
index 1e6bd993c08..f80abb06fca 100644
--- a/spec/requests/lfs_http_spec.rb
+++ b/spec/requests/lfs_http_spec.rb
@@ -1016,7 +1016,7 @@ describe 'Git LFS API and storage' do
it_behaves_like 'a valid response' do
it 'responds with status 200, location of lfs remote store and object details' do
- expect(json_response['TempPath']).to be_nil
+ expect(json_response['TempPath']).to eq(LfsObjectUploader.workhorse_local_upload_path)
expect(json_response['RemoteObject']).to have_key('ID')
expect(json_response['RemoteObject']).to have_key('GetURL')
expect(json_response['RemoteObject']).to have_key('StoreURL')
@@ -1073,7 +1073,9 @@ describe 'Git LFS API and storage' do
['123123', '../../123123'].each do |remote_id|
context "with invalid remote_id: #{remote_id}" do
subject do
- put_finalize_with_args('file.remote_id' => remote_id)
+ put_finalize(with_tempfile: true, args: {
+ 'file.remote_id' => remote_id
+ })
end
it 'responds with status 403' do
@@ -1093,9 +1095,10 @@ describe 'Git LFS API and storage' do
end
subject do
- put_finalize_with_args(
+ put_finalize(with_tempfile: true, args: {
'file.remote_id' => '12312300',
- 'file.name' => 'name')
+ 'file.name' => 'name'
+ })
end
it 'responds with status 200' do
@@ -1331,7 +1334,7 @@ describe 'Git LFS API and storage' do
put "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}/authorize", nil, authorize_headers
end
- def put_finalize(lfs_tmp = lfs_tmp_file, with_tempfile: false)
+ def put_finalize(lfs_tmp = lfs_tmp_file, with_tempfile: false, args: {})
upload_path = LfsObjectUploader.workhorse_local_upload_path
file_path = upload_path + '/' + lfs_tmp if lfs_tmp
@@ -1340,12 +1343,12 @@ describe 'Git LFS API and storage' do
FileUtils.touch(file_path)
end
- args = {
+ extra_args = {
'file.path' => file_path,
'file.name' => File.basename(file_path)
- }.compact
+ }
- put_finalize_with_args(args)
+ put_finalize_with_args(args.merge(extra_args).compact)
end
def put_finalize_with_args(args)
diff --git a/spec/requests/projects/cycle_analytics_events_spec.rb b/spec/requests/projects/cycle_analytics_events_spec.rb
index eef860821e5..bcc3e3a2678 100644
--- a/spec/requests/projects/cycle_analytics_events_spec.rb
+++ b/spec/requests/projects/cycle_analytics_events_spec.rb
@@ -23,7 +23,7 @@ describe 'cycle analytics events' do
it 'lists the issue events' do
get project_cycle_analytics_issue_path(project, format: :json)
- first_issue_iid = project.issues.sort(:created_desc).pluck(:iid).first.to_s
+ first_issue_iid = project.issues.sort_by_attribute(:created_desc).pluck(:iid).first.to_s
expect(json_response['events']).not_to be_empty
expect(json_response['events'].first['iid']).to eq(first_issue_iid)
@@ -32,7 +32,7 @@ describe 'cycle analytics events' do
it 'lists the plan events' do
get project_cycle_analytics_plan_path(project, format: :json)
- first_mr_short_sha = project.merge_requests.sort(:created_asc).first.commits.first.short_id
+ first_mr_short_sha = project.merge_requests.sort_by_attribute(:created_asc).first.commits.first.short_id
expect(json_response['events']).not_to be_empty
expect(json_response['events'].first['short_sha']).to eq(first_mr_short_sha)
@@ -43,7 +43,7 @@ describe 'cycle analytics events' do
expect(json_response['events']).not_to be_empty
- first_mr_iid = project.merge_requests.sort(:created_desc).pluck(:iid).first.to_s
+ first_mr_iid = project.merge_requests.sort_by_attribute(:created_desc).pluck(:iid).first.to_s
expect(json_response['events'].first['iid']).to eq(first_mr_iid)
end
@@ -58,7 +58,7 @@ describe 'cycle analytics events' do
it 'lists the review events' do
get project_cycle_analytics_review_path(project, format: :json)
- first_mr_iid = project.merge_requests.sort(:created_desc).pluck(:iid).first.to_s
+ first_mr_iid = project.merge_requests.sort_by_attribute(:created_desc).pluck(:iid).first.to_s
expect(json_response['events']).not_to be_empty
expect(json_response['events'].first['iid']).to eq(first_mr_iid)
@@ -74,7 +74,7 @@ describe 'cycle analytics events' do
it 'lists the production events' do
get project_cycle_analytics_production_path(project, format: :json)
- first_issue_iid = project.issues.sort(:created_desc).pluck(:iid).first.to_s
+ first_issue_iid = project.issues.sort_by_attribute(:created_desc).pluck(:iid).first.to_s
expect(json_response['events']).not_to be_empty
expect(json_response['events'].first['iid']).to eq(first_issue_iid)
diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb
index fb1281a6b42..e1b4e618092 100644
--- a/spec/routing/project_routing_spec.rb
+++ b/spec/routing/project_routing_spec.rb
@@ -164,20 +164,36 @@ describe 'project routing' do
# archive_project_repository GET /:project_id/repository/archive(.:format) projects/repositories#archive
# edit_project_repository GET /:project_id/repository/edit(.:format) projects/repositories#edit
describe Projects::RepositoriesController, 'routing' do
- it 'to #archive' do
- expect(get('/gitlab/gitlabhq/repository/master/archive')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', ref: 'master')
- end
-
it 'to #archive format:zip' do
- expect(get('/gitlab/gitlabhq/repository/master/archive.zip')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', format: 'zip', ref: 'master')
+ expect(get('/gitlab/gitlabhq/-/archive/master/archive.zip')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', format: 'zip', id: 'master/archive')
end
it 'to #archive format:tar.bz2' do
- expect(get('/gitlab/gitlabhq/repository/master/archive.tar.bz2')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', format: 'tar.bz2', ref: 'master')
+ expect(get('/gitlab/gitlabhq/-/archive/master/archive.tar.bz2')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', format: 'tar.bz2', id: 'master/archive')
end
it 'to #archive with "/" in route' do
- expect(get('/gitlab/gitlabhq/repository/improve/awesome/archive')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', ref: 'improve/awesome')
+ expect(get('/gitlab/gitlabhq/-/archive/improve/awesome/gitlabhq-improve-awesome.tar.gz')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', format: 'tar.gz', id: 'improve/awesome/gitlabhq-improve-awesome')
+ end
+
+ it 'to #archive_alternative' do
+ expect(get('/gitlab/gitlabhq/repository/archive')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', append_sha: true)
+ end
+
+ it 'to #archive_deprecated' do
+ expect(get('/gitlab/gitlabhq/repository/master/archive')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', id: 'master', append_sha: true)
+ end
+
+ it 'to #archive_deprecated format:zip' do
+ expect(get('/gitlab/gitlabhq/repository/master/archive.zip')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', format: 'zip', id: 'master', append_sha: true)
+ end
+
+ it 'to #archive_deprecated format:tar.bz2' do
+ expect(get('/gitlab/gitlabhq/repository/master/archive.tar.bz2')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', format: 'tar.bz2', id: 'master', append_sha: true)
+ end
+
+ it 'to #archive_deprecated with "/" in route' do
+ expect(get('/gitlab/gitlabhq/repository/improve/awesome/archive')).to route_to('projects/repositories#archive', namespace_id: 'gitlab', project_id: 'gitlabhq', id: 'improve/awesome', append_sha: true)
end
end
diff --git a/spec/rubocop/cop/gitlab/has_many_through_scope_spec.rb b/spec/rubocop/cop/gitlab/has_many_through_scope_spec.rb
new file mode 100644
index 00000000000..6d769c8e6fd
--- /dev/null
+++ b/spec/rubocop/cop/gitlab/has_many_through_scope_spec.rb
@@ -0,0 +1,74 @@
+require 'spec_helper'
+
+require 'rubocop'
+require 'rubocop/rspec/support'
+
+require_relative '../../../../rubocop/cop/gitlab/has_many_through_scope'
+
+describe RuboCop::Cop::Gitlab::HasManyThroughScope do # rubocop:disable RSpec/FilePath
+ include CopHelper
+
+ subject(:cop) { described_class.new }
+
+ context 'in a model file' do
+ before do
+ allow(cop).to receive(:in_model?).and_return(true)
+ end
+
+ context 'when the model does not use has_many :through' do
+ it 'does not register an offense' do
+ expect_no_offenses(<<-RUBY)
+ class User < ActiveRecord::Base
+ has_many :tags, source: 'UserTag'
+ end
+ RUBY
+ end
+ end
+
+ context 'when the model uses has_many :through' do
+ context 'when the association has no scope defined' do
+ it 'registers an offense on the association' do
+ expect_offense(<<-RUBY)
+ class User < ActiveRecord::Base
+ has_many :tags, through: :user_tags
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{described_class::MSG}
+ end
+ RUBY
+ end
+ end
+
+ context 'when the association has a scope defined' do
+ context 'when the scope does not disable auto-loading' do
+ it 'registers an offense on the scope' do
+ expect_offense(<<-RUBY)
+ class User < ActiveRecord::Base
+ has_many :tags, -> { where(active: true) }, through: :user_tags
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^ #{described_class::MSG}
+ end
+ RUBY
+ end
+ end
+
+ context 'when the scope has auto_include(false)' do
+ it 'does not register an offense' do
+ expect_no_offenses(<<-RUBY)
+ class User < ActiveRecord::Base
+ has_many :tags, -> { where(active: true).auto_include(false).reorder(nil) }, through: :user_tags
+ end
+ RUBY
+ end
+ end
+ end
+ end
+ end
+
+ context 'outside of a migration spec file' do
+ it 'does not register an offense' do
+ expect_no_offenses(<<-RUBY)
+ class User < ActiveRecord::Base
+ has_many :tags, through: :user_tags
+ end
+ RUBY
+ end
+ end
+end
diff --git a/spec/rubocop/cop/rspec/factories_in_migration_specs_spec.rb b/spec/rubocop/cop/rspec/factories_in_migration_specs_spec.rb
new file mode 100644
index 00000000000..2763f2bda21
--- /dev/null
+++ b/spec/rubocop/cop/rspec/factories_in_migration_specs_spec.rb
@@ -0,0 +1,48 @@
+require 'spec_helper'
+
+require 'rubocop'
+require 'rubocop/rspec/support'
+
+require_relative '../../../../rubocop/cop/rspec/factories_in_migration_specs'
+
+describe RuboCop::Cop::RSpec::FactoriesInMigrationSpecs do
+ include CopHelper
+
+ let(:source_file) { 'spec/migrations/foo_spec.rb' }
+
+ subject(:cop) { described_class.new }
+
+ shared_examples 'an offensive factory call' do |namespace|
+ %i[build build_list create create_list].each do |forbidden_method|
+ namespaced_forbidden_method = "#{namespace}#{forbidden_method}(:user)"
+
+ it "registers an offense for #{namespaced_forbidden_method}" do
+ expect_offense(<<-RUBY)
+ describe 'foo' do
+ let(:user) { #{namespaced_forbidden_method} }
+ #{'^' * namespaced_forbidden_method.size} Don't use FactoryBot.#{forbidden_method} in migration specs, use `table` instead.
+ end
+ RUBY
+ end
+ end
+ end
+
+ context 'in a migration spec file' do
+ before do
+ allow(cop).to receive(:in_migration_spec?).and_return(true)
+ end
+
+ it_behaves_like 'an offensive factory call', ''
+ it_behaves_like 'an offensive factory call', 'FactoryBot.'
+ end
+
+ context 'outside of a migration spec file' do
+ it "does not register an offense" do
+ expect_no_offenses(<<-RUBY)
+ describe 'foo' do
+ let(:user) { create(:user) }
+ end
+ RUBY
+ end
+ end
+end
diff --git a/spec/serializers/build_serializer_spec.rb b/spec/serializers/build_serializer_spec.rb
index 9673b11c2a2..98cd15e248b 100644
--- a/spec/serializers/build_serializer_spec.rb
+++ b/spec/serializers/build_serializer_spec.rb
@@ -28,15 +28,31 @@ describe BuildSerializer do
end
describe '#represent_status' do
- context 'when represents only status' do
- let(:resource) { create(:ci_build) }
+ context 'for a failed build' do
+ let(:resource) { create(:ci_build, :failed) }
let(:status) { resource.detailed_status(double('user')) }
subject { serializer.represent_status(resource) }
it 'serializes only status' do
expect(subject[:text]).to eq(status.text)
- expect(subject[:label]).to eq(status.label)
+ expect(subject[:label]).to eq('failed')
+ expect(subject[:tooltip]).to eq('failed (unknown failure)')
+ expect(subject[:icon]).to eq(status.icon)
+ expect(subject[:favicon]).to match_asset_path("/assets/ci_favicons/#{status.favicon}.ico")
+ end
+ end
+
+ context 'for any other type of build' do
+ let(:resource) { create(:ci_build, :success) }
+ let(:status) { resource.detailed_status(double('user')) }
+
+ subject { serializer.represent_status(resource) }
+
+ it 'serializes only status' do
+ expect(subject[:text]).to eq(status.text)
+ expect(subject[:label]).to eq('passed')
+ expect(subject[:tooltip]).to eq('passed')
expect(subject[:icon]).to eq(status.icon)
expect(subject[:favicon]).to match_asset_path("/assets/ci_favicons/#{status.favicon}.ico")
end
diff --git a/spec/serializers/discussion_entity_spec.rb b/spec/serializers/discussion_entity_spec.rb
index 7ee8e38af1c..7e19e74ca00 100644
--- a/spec/serializers/discussion_entity_spec.rb
+++ b/spec/serializers/discussion_entity_spec.rb
@@ -6,7 +6,7 @@ describe DiscussionEntity do
let(:user) { create(:user) }
let(:note) { create(:discussion_note_on_merge_request) }
let(:discussion) { note.discussion }
- let(:request) { double('request') }
+ let(:request) { double('request', note_entity: ProjectNoteEntity) }
let(:controller) { double('controller') }
let(:entity) { described_class.new(discussion, request: request, context: controller) }
diff --git a/spec/serializers/job_entity_spec.rb b/spec/serializers/job_entity_spec.rb
index 026360e91a3..24a6f1a2a8a 100644
--- a/spec/serializers/job_entity_spec.rb
+++ b/spec/serializers/job_entity_spec.rb
@@ -38,7 +38,7 @@ describe JobEntity do
it 'contains details' do
expect(subject).to include :status
- expect(subject[:status]).to include :icon, :favicon, :text, :label
+ expect(subject[:status]).to include :icon, :favicon, :text, :label, :tooltip
end
context 'when job is retryable' do
@@ -126,7 +126,29 @@ describe JobEntity do
it 'contains details' do
expect(subject).to include :status
- expect(subject[:status]).to include :icon, :favicon, :text, :label
+ expect(subject[:status]).to include :icon, :favicon, :text, :label, :tooltip
+ end
+ end
+
+ context 'when job failed' do
+ let(:job) { create(:ci_build, :script_failure) }
+
+ describe 'status' do
+ it 'should contain the failure reason inside label' do
+ expect(subject[:status]).to include :icon, :favicon, :text, :label, :tooltip
+ expect(subject[:status][:label]).to eq('failed')
+ expect(subject[:status][:tooltip]).to eq('failed (script failure)')
+ end
+ end
+ end
+
+ context 'when job passed' do
+ let(:job) { create(:ci_build, :success) }
+
+ describe 'status' do
+ it 'should not contain the failure reason inside label' do
+ expect(subject[:status][:label]).to eq('passed')
+ end
end
end
end
diff --git a/spec/serializers/note_entity_spec.rb b/spec/serializers/note_entity_spec.rb
index 51a8587ace9..13cda781cda 100644
--- a/spec/serializers/note_entity_spec.rb
+++ b/spec/serializers/note_entity_spec.rb
@@ -10,53 +10,5 @@ describe NoteEntity do
let(:user) { create(:user) }
subject { entity.as_json }
- context 'basic note' do
- it 'exposes correct elements' do
- expect(subject).to include(:type, :author, :human_access, :note, :note_html, :current_user,
- :discussion_id, :emoji_awardable, :award_emoji, :toggle_award_path, :report_abuse_path, :path, :attachment)
- end
-
- it 'does not expose elements for specific notes cases' do
- expect(subject).not_to include(:last_edited_by, :last_edited_at, :system_note_icon_name)
- end
-
- it 'exposes author correctly' do
- expect(subject[:author]).to include(:id, :name, :username, :state, :avatar_url, :path)
- end
-
- it 'does not expose web_url for author' do
- expect(subject[:author]).not_to include(:web_url)
- end
- end
-
- context 'when note was edited' do
- before do
- note.update(updated_at: 1.minute.from_now, updated_by: user)
- end
-
- it 'exposes last_edited_at and last_edited_by elements' do
- expect(subject).to include(:last_edited_at, :last_edited_by)
- end
- end
-
- context 'when note is a system note' do
- before do
- note.update(system: true)
- end
-
- it 'exposes system_note_icon_name element' do
- expect(subject).to include(:system_note_icon_name)
- end
- end
-
- context 'when note is part of resolvable discussion' do
- before do
- allow(note).to receive(:part_of_discussion?).and_return(true)
- allow(note).to receive(:resolvable?).and_return(true)
- end
-
- it 'exposes paths to resolve note' do
- expect(subject).to include(:resolve_path, :resolve_with_issue_path)
- end
- end
+ it_behaves_like 'note entity'
end
diff --git a/spec/serializers/pipeline_entity_spec.rb b/spec/serializers/pipeline_entity_spec.rb
index 248552d1858..2473c561f4b 100644
--- a/spec/serializers/pipeline_entity_spec.rb
+++ b/spec/serializers/pipeline_entity_spec.rb
@@ -30,7 +30,7 @@ describe PipelineEntity do
expect(subject).to include :details
expect(subject[:details])
.to include :duration, :finished_at
- expect(subject[:details][:status]).to include :icon, :favicon, :text, :label
+ expect(subject[:details][:status]).to include :icon, :favicon, :text, :label, :tooltip
end
it 'contains flags' do
diff --git a/spec/serializers/project_note_entity_spec.rb b/spec/serializers/project_note_entity_spec.rb
new file mode 100644
index 00000000000..dafd1cf603e
--- /dev/null
+++ b/spec/serializers/project_note_entity_spec.rb
@@ -0,0 +1,29 @@
+require 'spec_helper'
+
+describe ProjectNoteEntity do
+ include Gitlab::Routing
+
+ let(:request) { double('request', current_user: user, noteable: note.noteable) }
+
+ let(:entity) { described_class.new(note, request: request) }
+ let(:note) { create(:note) }
+ let(:user) { create(:user) }
+ subject { entity.as_json }
+
+ it_behaves_like 'note entity'
+
+ it 'exposes project-specific elements' do
+ expect(subject).to include(:human_access, :toggle_award_path, :path)
+ end
+
+ context 'when note is part of resolvable discussion' do
+ before do
+ allow(note).to receive(:part_of_discussion?).and_return(true)
+ allow(note).to receive(:resolvable?).and_return(true)
+ end
+
+ it 'exposes paths to resolve note' do
+ expect(subject).to include(:resolve_path, :resolve_with_issue_path)
+ end
+ end
+end
diff --git a/spec/serializers/stage_entity_spec.rb b/spec/serializers/stage_entity_spec.rb
index 40e303f7b89..2034c7891ef 100644
--- a/spec/serializers/stage_entity_spec.rb
+++ b/spec/serializers/stage_entity_spec.rb
@@ -26,7 +26,7 @@ describe StageEntity do
end
it 'contains detailed status' do
- expect(subject[:status]).to include :text, :label, :group, :icon
+ expect(subject[:status]).to include :text, :label, :group, :icon, :tooltip
expect(subject[:status][:label]).to eq 'passed'
end
diff --git a/spec/serializers/status_entity_spec.rb b/spec/serializers/status_entity_spec.rb
index 70402bac2e2..559475e571c 100644
--- a/spec/serializers/status_entity_spec.rb
+++ b/spec/serializers/status_entity_spec.rb
@@ -16,7 +16,7 @@ describe StatusEntity do
subject { entity.as_json }
it 'contains status details' do
- expect(subject).to include :text, :icon, :favicon, :label, :group
+ expect(subject).to include :text, :icon, :favicon, :label, :group, :tooltip
expect(subject).to include :has_details, :details_path
expect(subject[:favicon]).to match_asset_path('/assets/ci_favicons/favicon_status_success.ico')
end
diff --git a/spec/services/auth/container_registry_authentication_service_spec.rb b/spec/services/auth/container_registry_authentication_service_spec.rb
index 290eeae828e..da8e660c16b 100644
--- a/spec/services/auth/container_registry_authentication_service_spec.rb
+++ b/spec/services/auth/container_registry_authentication_service_spec.rb
@@ -585,4 +585,140 @@ describe Auth::ContainerRegistryAuthenticationService do
it_behaves_like 'not a container repository factory'
end
end
+
+ context 'for deploy tokens' do
+ let(:current_params) do
+ { scope: "repository:#{project.full_path}:pull" }
+ end
+
+ context 'when deploy token has read_registry as a scope' do
+ let(:current_user) { create(:deploy_token, projects: [project]) }
+
+ context 'for public project' do
+ let(:project) { create(:project, :public) }
+
+ context 'when pulling' do
+ it_behaves_like 'a pullable'
+ end
+
+ context 'when pushing' do
+ let(:current_params) do
+ { scope: "repository:#{project.full_path}:push" }
+ end
+
+ it_behaves_like 'an inaccessible'
+ end
+ end
+
+ context 'for internal project' do
+ let(:project) { create(:project, :internal) }
+
+ context 'when pulling' do
+ it_behaves_like 'a pullable'
+ end
+
+ context 'when pushing' do
+ let(:current_params) do
+ { scope: "repository:#{project.full_path}:push" }
+ end
+
+ it_behaves_like 'an inaccessible'
+ end
+ end
+
+ context 'for private project' do
+ let(:project) { create(:project, :private) }
+
+ context 'when pulling' do
+ it_behaves_like 'a pullable'
+ end
+
+ context 'when pushing' do
+ let(:current_params) do
+ { scope: "repository:#{project.full_path}:push" }
+ end
+
+ it_behaves_like 'an inaccessible'
+ end
+ end
+ end
+
+ context 'when deploy token does not have read_registry scope' do
+ let(:current_user) { create(:deploy_token, projects: [project], read_registry: false) }
+
+ context 'for public project' do
+ let(:project) { create(:project, :public) }
+
+ context 'when pulling' do
+ it_behaves_like 'a pullable'
+ end
+ end
+
+ context 'for internal project' do
+ let(:project) { create(:project, :internal) }
+
+ context 'when pulling' do
+ it_behaves_like 'an inaccessible'
+ end
+ end
+
+ context 'for private project' do
+ let(:project) { create(:project, :internal) }
+
+ context 'when pulling' do
+ it_behaves_like 'an inaccessible'
+ end
+ end
+ end
+
+ context 'when deploy token is not related to the project' do
+ let(:current_user) { create(:deploy_token, read_registry: false) }
+
+ context 'for public project' do
+ let(:project) { create(:project, :public) }
+
+ context 'when pulling' do
+ it_behaves_like 'a pullable'
+ end
+ end
+
+ context 'for internal project' do
+ let(:project) { create(:project, :internal) }
+
+ context 'when pulling' do
+ it_behaves_like 'an inaccessible'
+ end
+ end
+
+ context 'for private project' do
+ let(:project) { create(:project, :internal) }
+
+ context 'when pulling' do
+ it_behaves_like 'an inaccessible'
+ end
+ end
+ end
+
+ context 'when deploy token has been revoked' do
+ let(:current_user) { create(:deploy_token, :revoked, projects: [project]) }
+
+ context 'for public project' do
+ let(:project) { create(:project, :public) }
+
+ it_behaves_like 'a pullable'
+ end
+
+ context 'for internal project' do
+ let(:project) { create(:project, :internal) }
+
+ it_behaves_like 'an inaccessible'
+ end
+
+ context 'for private project' do
+ let(:project) { create(:project, :internal) }
+
+ it_behaves_like 'an inaccessible'
+ end
+ end
+ end
end
diff --git a/spec/services/boards/issues/list_service_spec.rb b/spec/services/boards/issues/list_service_spec.rb
index b4efa3e44b6..27a7bf0e605 100644
--- a/spec/services/boards/issues/list_service_spec.rb
+++ b/spec/services/boards/issues/list_service_spec.rb
@@ -48,10 +48,8 @@ describe Boards::Issues::ListService do
context 'when parent is a group' do
let(:user) { create(:user) }
- let(:group) { create(:group) }
let(:project) { create(:project, :empty_repo, namespace: group) }
let(:project1) { create(:project, :empty_repo, namespace: group) }
- let(:board) { create(:board, group: group) }
let(:m1) { create(:milestone, group: group) }
let(:m2) { create(:milestone, group: group) }
@@ -92,13 +90,30 @@ describe Boards::Issues::ListService do
let!(:closed_issue4) { create(:labeled_issue, :closed, project: project1, labels: [p1, p1_project1]) }
let!(:closed_issue5) { create(:labeled_issue, :closed, project: project1, labels: [development]) }
- let(:parent) { group }
-
before do
group.add_developer(user)
end
- it_behaves_like 'issues list service'
+ context 'and group has no parent' do
+ let(:parent) { group }
+ let(:group) { create(:group) }
+ let(:board) { create(:board, group: group) }
+
+ it_behaves_like 'issues list service'
+ end
+
+ context 'and group is an ancestor', :nested_groups do
+ let(:parent) { create(:group) }
+ let(:group) { create(:group, parent: parent) }
+ let!(:backlog) { create(:backlog_list, board: board) }
+ let(:board) { create(:board, group: parent) }
+
+ before do
+ parent.add_developer(user)
+ end
+
+ it_behaves_like 'issues list service'
+ end
end
end
end
diff --git a/spec/services/boards/issues/move_service_spec.rb b/spec/services/boards/issues/move_service_spec.rb
index 0a6b6d880d3..dd0ad5f11bd 100644
--- a/spec/services/boards/issues/move_service_spec.rb
+++ b/spec/services/boards/issues/move_service_spec.rb
@@ -48,7 +48,7 @@ describe Boards::Issues::MoveService do
parent.add_developer(user)
end
- it_behaves_like 'issues move service'
+ it_behaves_like 'issues move service', true
end
end
end
diff --git a/spec/services/deploy_tokens/create_service_spec.rb b/spec/services/deploy_tokens/create_service_spec.rb
new file mode 100644
index 00000000000..3a2bbf1ecd1
--- /dev/null
+++ b/spec/services/deploy_tokens/create_service_spec.rb
@@ -0,0 +1,45 @@
+require 'spec_helper'
+
+describe DeployTokens::CreateService do
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+ let(:deploy_token_params) { attributes_for(:deploy_token) }
+
+ describe '#execute' do
+ subject { described_class.new(project, user, deploy_token_params).execute }
+
+ context 'when the deploy token is valid' do
+ it 'should create a new DeployToken' do
+ expect { subject }.to change { DeployToken.count }.by(1)
+ end
+
+ it 'should create a new ProjectDeployToken' do
+ expect { subject }.to change { ProjectDeployToken.count }.by(1)
+ end
+
+ it 'returns a DeployToken' do
+ expect(subject).to be_an_instance_of DeployToken
+ end
+ end
+
+ context 'when expires at date is not passed' do
+ let(:deploy_token_params) { attributes_for(:deploy_token, expires_at: '') }
+
+ it 'should set Forever.date' do
+ expect(subject.read_attribute(:expires_at)).to eq(Forever.date)
+ end
+ end
+
+ context 'when the deploy token is invalid' do
+ let(:deploy_token_params) { attributes_for(:deploy_token, read_repository: false, read_registry: false) }
+
+ it 'should not create a new DeployToken' do
+ expect { subject }.not_to change { DeployToken.count }
+ end
+
+ it 'should not create a new ProjectDeployToken' do
+ expect { subject }.not_to change { ProjectDeployToken.count }
+ end
+ end
+ end
+end
diff --git a/spec/services/events/render_service_spec.rb b/spec/services/events/render_service_spec.rb
index b4a4a44d07b..075cb45e46c 100644
--- a/spec/services/events/render_service_spec.rb
+++ b/spec/services/events/render_service_spec.rb
@@ -9,9 +9,7 @@ describe Events::RenderService do
context 'when the request format is atom' do
it 'renders the note inside events' do
expect(Banzai::ObjectRenderer).to receive(:new)
- .with(event.project, user,
- only_path: false,
- xhtml: true)
+ .with(user: user, redaction_context: { only_path: false, xhtml: true })
.and_call_original
expect_any_instance_of(Banzai::ObjectRenderer)
@@ -24,7 +22,7 @@ describe Events::RenderService do
context 'when the request format is not atom' do
it 'renders the note inside events' do
expect(Banzai::ObjectRenderer).to receive(:new)
- .with(event.project, user, {})
+ .with(user: user, redaction_context: {})
.and_call_original
expect_any_instance_of(Banzai::ObjectRenderer)
diff --git a/spec/services/issuable/destroy_service_spec.rb b/spec/services/issuable/destroy_service_spec.rb
index 0a3647a814f..8ccbba7fa58 100644
--- a/spec/services/issuable/destroy_service_spec.rb
+++ b/spec/services/issuable/destroy_service_spec.rb
@@ -8,7 +8,7 @@ describe Issuable::DestroyService do
describe '#execute' do
context 'when issuable is an issue' do
- let!(:issue) { create(:issue, project: project, author: user) }
+ let!(:issue) { create(:issue, project: project, author: user, assignees: [user]) }
it 'destroys the issue' do
expect { service.execute(issue) }.to change { project.issues.count }.by(-1)
@@ -26,10 +26,15 @@ describe Issuable::DestroyService do
expect { service.execute(issue) }
.to change { user.todos_pending_count }.from(1).to(0)
end
+
+ it 'invalidates the issues count cache for the assignees' do
+ expect_any_instance_of(User).to receive(:invalidate_cache_counts).once
+ service.execute(issue)
+ end
end
context 'when issuable is a merge request' do
- let!(:merge_request) { create(:merge_request, target_project: project, source_project: project, author: user) }
+ let!(:merge_request) { create(:merge_request, target_project: project, source_project: project, author: user, assignee: user) }
it 'destroys the merge request' do
expect { service.execute(merge_request) }.to change { project.merge_requests.count }.by(-1)
@@ -41,6 +46,11 @@ describe Issuable::DestroyService do
service.execute(merge_request)
end
+ it 'invalidates the merge request caches for the MR assignee' do
+ expect_any_instance_of(User).to receive(:invalidate_cache_counts).once
+ service.execute(merge_request)
+ end
+
it 'updates the todo caches for users with todos on the merge request' do
create(:todo, target: merge_request, user: user, author: user, project: project)
diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb
index 41237dd7160..23b1134b5a3 100644
--- a/spec/services/issues/update_service_spec.rb
+++ b/spec/services/issues/update_service_spec.rb
@@ -97,6 +97,39 @@ describe Issues::UpdateService, :mailer do
expect(issue.relative_position).to be_between(issue1.relative_position, issue2.relative_position)
end
+ context 'when moving issue between issues from different projects', :nested_groups do
+ let(:group) { create(:group) }
+ let(:subgroup) { create(:group, parent: group) }
+
+ let(:project_1) { create(:project, namespace: group) }
+ let(:project_2) { create(:project, namespace: group) }
+ let(:project_3) { create(:project, namespace: subgroup) }
+
+ let(:issue_1) { create(:issue, project: project_1) }
+ let(:issue_2) { create(:issue, project: project_2) }
+ let(:issue_3) { create(:issue, project: project_3) }
+
+ before do
+ group.add_developer(user)
+ end
+
+ it 'sorts issues as specified by parameters' do
+ # Moving all issues to end here like the last example won't work since
+ # all projects only have the same issue count
+ # so their relative_position will be the same.
+ issue_1.move_to_end
+ issue_2.move_after(issue_1)
+ issue_3.move_after(issue_2)
+ [issue_1, issue_2, issue_3].map(&:save)
+
+ opts[:move_between_ids] = [issue_1.id, issue_2.id]
+ opts[:board_group_id] = group.id
+
+ described_class.new(issue_3.project, user, opts).execute(issue_3)
+ expect(issue_2.relative_position).to be_between(issue_1.relative_position, issue_2.relative_position)
+ end
+ end
+
context 'when current user cannot admin issues in the project' do
let(:guest) { create(:user) }
before do
diff --git a/spec/services/merge_requests/conflicts/list_service_spec.rb b/spec/services/merge_requests/conflicts/list_service_spec.rb
index 6cadcd438c3..837b8a56d12 100644
--- a/spec/services/merge_requests/conflicts/list_service_spec.rb
+++ b/spec/services/merge_requests/conflicts/list_service_spec.rb
@@ -77,6 +77,14 @@ describe MergeRequests::Conflicts::ListService do
expect(service.can_be_resolved_in_ui?).to be_falsey
end
+ it 'returns a falsey value when the MR has a missing revision after a force push' do
+ merge_request = create_merge_request('conflict-resolvable')
+ service = conflicts_service(merge_request)
+ allow(merge_request).to receive_message_chain(:target_branch_head, :raw, :id).and_return(Gitlab::Git::BLANK_SHA)
+
+ expect(service.can_be_resolved_in_ui?).to be_falsey
+ end
+
context 'with gitaly disabled', :skip_gitaly_mock do
it 'returns a falsey value when the MR has a missing ref after a force push' do
merge_request = create_merge_request('conflict-resolvable')
@@ -85,6 +93,14 @@ describe MergeRequests::Conflicts::ListService do
expect(service.can_be_resolved_in_ui?).to be_falsey
end
+
+ it 'returns a falsey value when the MR has a missing revision after a force push' do
+ merge_request = create_merge_request('conflict-resolvable')
+ service = conflicts_service(merge_request)
+ allow(merge_request).to receive_message_chain(:target_branch_head, :raw, :id).and_return(Gitlab::Git::BLANK_SHA)
+
+ expect(service.can_be_resolved_in_ui?).to be_falsey
+ end
end
end
end
diff --git a/spec/services/merge_requests/create_service_spec.rb b/spec/services/merge_requests/create_service_spec.rb
index 44a83c436cb..736a50b2c15 100644
--- a/spec/services/merge_requests/create_service_spec.rb
+++ b/spec/services/merge_requests/create_service_spec.rb
@@ -1,6 +1,8 @@
require 'spec_helper'
describe MergeRequests::CreateService do
+ include ProjectForksHelper
+
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
let(:assignee) { create(:user) }
@@ -300,7 +302,7 @@ describe MergeRequests::CreateService do
end
context 'when source and target projects are different' do
- let(:target_project) { create(:project) }
+ let(:target_project) { fork_project(project, nil, repository: true) }
let(:opts) do
{
@@ -334,6 +336,26 @@ describe MergeRequests::CreateService do
.to raise_error Gitlab::Access::AccessDeniedError
end
end
+
+ context 'when the user has access to both projects' do
+ before do
+ target_project.add_developer(user)
+ project.add_developer(user)
+ end
+
+ it 'creates the merge request' do
+ merge_request = described_class.new(project, user, opts).execute
+
+ expect(merge_request).to be_persisted
+ end
+
+ it 'does not create the merge request when the target project is archived' do
+ target_project.update!(archived: true)
+
+ expect { described_class.new(project, user, opts).execute }
+ .to raise_error Gitlab::Access::AccessDeniedError
+ end
+ end
end
context 'when user sets source project id' do
diff --git a/spec/services/notes/post_process_service_spec.rb b/spec/services/notes/post_process_service_spec.rb
index 6ef5e93cb20..4e2ab919f0f 100644
--- a/spec/services/notes/post_process_service_spec.rb
+++ b/spec/services/notes/post_process_service_spec.rb
@@ -23,5 +23,23 @@ describe Notes::PostProcessService do
described_class.new(@note).execute
end
+
+ context 'with a confidential issue' do
+ let(:issue) { create(:issue, :confidential, project: project) }
+
+ it "doesn't call note hooks/services" do
+ expect(project).not_to receive(:execute_hooks).with(anything, :note_hooks)
+ expect(project).not_to receive(:execute_services).with(anything, :note_hooks)
+
+ described_class.new(@note).execute
+ end
+
+ it "calls confidential-note hooks/services" do
+ expect(project).to receive(:execute_hooks).with(anything, :confidential_note_hooks)
+ expect(project).to receive(:execute_services).with(anything, :confidential_note_hooks)
+
+ described_class.new(@note).execute
+ end
+ end
end
end
diff --git a/spec/services/notes/render_service_spec.rb b/spec/services/notes/render_service_spec.rb
index faac498037f..f771620bc0d 100644
--- a/spec/services/notes/render_service_spec.rb
+++ b/spec/services/notes/render_service_spec.rb
@@ -4,23 +4,28 @@ describe Notes::RenderService do
describe '#execute' do
it 'renders a Note' do
note = double(:note)
- project = double(:project)
wiki = double(:wiki)
user = double(:user)
- expect(Banzai::ObjectRenderer).to receive(:new)
- .with(project, user,
- requested_path: 'foo',
- project_wiki: wiki,
- ref: 'bar',
- only_path: nil,
- xhtml: false)
+ expect(Banzai::ObjectRenderer)
+ .to receive(:new)
+ .with(
+ user: user,
+ redaction_context: {
+ requested_path: 'foo',
+ project_wiki: wiki,
+ ref: 'bar',
+ only_path: nil,
+ xhtml: false
+ }
+ )
.and_call_original
expect_any_instance_of(Banzai::ObjectRenderer)
- .to receive(:render).with([note], :note)
+ .to receive(:render)
+ .with([note], :note)
- described_class.new(user).execute([note], project,
+ described_class.new(user).execute([note],
requested_path: 'foo',
project_wiki: wiki,
ref: 'bar',
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index 2cacb97a293..e35f0f6337a 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -28,6 +28,14 @@ describe Projects::CreateService, '#execute' do
end
end
+ describe 'after create actions' do
+ it 'invalidate personal_projects_count caches' do
+ expect(user).to receive(:invalidate_personal_projects_count)
+
+ create_project(user, opts)
+ end
+ end
+
context "admin creates project with other user's namespace_id" do
it 'sets the correct permissions' do
admin = create(:admin)
diff --git a/spec/services/projects/destroy_service_spec.rb b/spec/services/projects/destroy_service_spec.rb
index 0bec2054f50..a66e3c5e995 100644
--- a/spec/services/projects/destroy_service_spec.rb
+++ b/spec/services/projects/destroy_service_spec.rb
@@ -66,6 +66,12 @@ describe Projects::DestroyService do
end
it_behaves_like 'deleting the project'
+
+ it 'invalidates personal_project_count cache' do
+ expect(user).to receive(:invalidate_personal_projects_count)
+
+ destroy_project(project, user)
+ end
end
context 'Sidekiq fake' do
@@ -242,6 +248,28 @@ describe Projects::DestroyService do
end
end
+ context '#attempt_restore_repositories' do
+ let(:path) { project.disk_path + '.git' }
+
+ before do
+ expect(project.gitlab_shell.exists?(project.repository_storage_path, path)).to be_truthy
+ expect(project.gitlab_shell.exists?(project.repository_storage_path, remove_path)).to be_falsey
+
+ # Dont run sidekiq to check if renamed repository exists
+ Sidekiq::Testing.fake! { destroy_project(project, user, {}) }
+
+ expect(project.gitlab_shell.exists?(project.repository_storage_path, path)).to be_falsey
+ expect(project.gitlab_shell.exists?(project.repository_storage_path, remove_path)).to be_truthy
+ end
+
+ it 'restores the repositories' do
+ Sidekiq::Testing.fake! { described_class.new(project, user).attempt_repositories_rollback }
+
+ expect(project.gitlab_shell.exists?(project.repository_storage_path, path)).to be_truthy
+ expect(project.gitlab_shell.exists?(project.repository_storage_path, remove_path)).to be_falsey
+ end
+ end
+
def destroy_project(project, user, params = {})
if async
Projects::DestroyService.new(project, user, params).async_execute
diff --git a/spec/services/projects/gitlab_projects_import_service_spec.rb b/spec/services/projects/gitlab_projects_import_service_spec.rb
index 6b8f9619bc4..ee1a886f5d6 100644
--- a/spec/services/projects/gitlab_projects_import_service_spec.rb
+++ b/spec/services/projects/gitlab_projects_import_service_spec.rb
@@ -2,8 +2,11 @@ require 'spec_helper'
describe Projects::GitlabProjectsImportService do
set(:namespace) { create(:namespace) }
+ let(:path) { 'test-path' }
let(:file) { fixture_file_upload(Rails.root + 'spec/fixtures/doc_sample.txt', 'text/plain') }
- subject { described_class.new(namespace.owner, { namespace_id: namespace.id, path: path, file: file }) }
+ let(:overwrite) { false }
+ let(:import_params) { { namespace_id: namespace.id, path: path, file: file, overwrite: overwrite } }
+ subject { described_class.new(namespace.owner, import_params) }
describe '#execute' do
context 'with an invalid path' do
@@ -18,8 +21,6 @@ describe Projects::GitlabProjectsImportService do
end
context 'with a valid path' do
- let(:path) { 'test-path' }
-
it 'creates a project' do
project = subject.execute
@@ -27,5 +28,38 @@ describe Projects::GitlabProjectsImportService do
expect(project).to be_valid
end
end
+
+ context 'override params' do
+ it 'stores them as import data when passed' do
+ project = described_class
+ .new(namespace.owner, import_params, description: 'Hello')
+ .execute
+
+ expect(project.import_data.data['override_params']['description']).to eq('Hello')
+ end
+ end
+
+ context 'when there is a project with the same path' do
+ let(:existing_project) { create(:project, namespace: namespace) }
+ let(:path) { existing_project.path}
+
+ it 'does not create the project' do
+ project = subject.execute
+
+ expect(project).to be_invalid
+ expect(project).not_to be_persisted
+ end
+
+ context 'when overwrite param is set' do
+ let(:overwrite) { true }
+
+ it 'creates a project in a temporary full_path' do
+ project = subject.execute
+
+ expect(project).to be_valid
+ expect(project).to be_persisted
+ end
+ end
+ end
end
end
diff --git a/spec/services/projects/import_export/export_service_spec.rb b/spec/services/projects/import_export/export_service_spec.rb
index 51491c7d529..f9e5530bc9d 100644
--- a/spec/services/projects/import_export/export_service_spec.rb
+++ b/spec/services/projects/import_export/export_service_spec.rb
@@ -8,6 +8,49 @@ describe Projects::ImportExport::ExportService do
let(:service) { described_class.new(project, user) }
let!(:after_export_strategy) { Gitlab::ImportExport::AfterExportStrategies::DownloadNotificationStrategy.new }
+ it 'saves the version' do
+ expect(Gitlab::ImportExport::VersionSaver).to receive(:new).and_call_original
+
+ service.execute
+ end
+
+ it 'saves the avatar' do
+ expect(Gitlab::ImportExport::AvatarSaver).to receive(:new).and_call_original
+
+ service.execute
+ end
+
+ it 'saves the models' do
+ expect(Gitlab::ImportExport::ProjectTreeSaver).to receive(:new).and_call_original
+
+ service.execute
+ end
+
+ it 'saves the uploads' do
+ expect(Gitlab::ImportExport::UploadsSaver).to receive(:new).and_call_original
+
+ service.execute
+ end
+
+ it 'saves the repo' do
+ # once for the normal repo, once for the wiki
+ expect(Gitlab::ImportExport::RepoSaver).to receive(:new).twice.and_call_original
+
+ service.execute
+ end
+
+ it 'saves the lfs objects' do
+ expect(Gitlab::ImportExport::LfsSaver).to receive(:new).and_call_original
+
+ service.execute
+ end
+
+ it 'saves the wiki repo' do
+ expect(Gitlab::ImportExport::WikiRepoSaver).to receive(:new).and_call_original
+
+ service.execute
+ end
+
context 'when all saver services succeed' do
before do
allow(service).to receive(:save_services).and_return(true)
diff --git a/spec/services/projects/move_access_service_spec.rb b/spec/services/projects/move_access_service_spec.rb
new file mode 100644
index 00000000000..a820ebd91f4
--- /dev/null
+++ b/spec/services/projects/move_access_service_spec.rb
@@ -0,0 +1,114 @@
+require 'spec_helper'
+
+describe Projects::MoveAccessService do
+ let(:user) { create(:user) }
+ let(:group) { create(:group) }
+ let(:project_with_access) { create(:project, namespace: user.namespace) }
+ let(:master_user) { create(:user) }
+ let(:reporter_user) { create(:user) }
+ let(:developer_user) { create(:user) }
+ let(:master_group) { create(:group) }
+ let(:reporter_group) { create(:group) }
+ let(:developer_group) { create(:group) }
+
+ before do
+ project_with_access.add_master(master_user)
+ project_with_access.add_developer(developer_user)
+ project_with_access.add_reporter(reporter_user)
+ project_with_access.project_group_links.create(group: master_group, group_access: Gitlab::Access::MASTER)
+ project_with_access.project_group_links.create(group: developer_group, group_access: Gitlab::Access::DEVELOPER)
+ project_with_access.project_group_links.create(group: reporter_group, group_access: Gitlab::Access::REPORTER)
+ end
+
+ subject { described_class.new(target_project, user) }
+
+ describe '#execute' do
+ shared_examples 'move the accesses' do
+ it do
+ expect(project_with_access.project_members.count).to eq 4
+ expect(project_with_access.project_group_links.count).to eq 3
+ expect(project_with_access.authorized_users.count).to eq 4
+
+ subject.execute(project_with_access)
+
+ expect(project_with_access.project_members.count).to eq 0
+ expect(project_with_access.project_group_links.count).to eq 0
+ expect(project_with_access.authorized_users.count).to eq 1
+ expect(target_project.project_members.count).to eq 4
+ expect(target_project.project_group_links.count).to eq 3
+ expect(target_project.authorized_users.count).to eq 4
+ end
+
+ it 'rollbacks if an exception is raised' do
+ allow(subject).to receive(:success).and_raise(StandardError)
+
+ expect { subject.execute(project_with_groups) }.to raise_error(StandardError)
+
+ expect(project_with_access.project_members.count).to eq 4
+ expect(project_with_access.project_group_links.count).to eq 3
+ expect(project_with_access.authorized_users.count).to eq 4
+ end
+ end
+
+ context 'when both projects are in the same namespace' do
+ let(:target_project) { create(:project, namespace: user.namespace) }
+
+ it 'does not refresh project owner authorized projects' do
+ allow(project_with_access).to receive(:namespace).and_return(user.namespace)
+ expect(project_with_access.namespace).not_to receive(:refresh_project_authorizations)
+ expect(target_project.namespace).not_to receive(:refresh_project_authorizations)
+
+ subject.execute(project_with_access)
+ end
+
+ it_behaves_like 'move the accesses'
+ end
+
+ context 'when projects are in different namespaces' do
+ let(:target_project) { create(:project, namespace: group) }
+
+ before do
+ group.add_owner(user)
+ end
+
+ it 'refreshes both project owner authorized projects' do
+ allow(project_with_access).to receive(:namespace).and_return(user.namespace)
+ expect(user.namespace).to receive(:refresh_project_authorizations).once
+ expect(group).to receive(:refresh_project_authorizations).once
+
+ subject.execute(project_with_access)
+ end
+
+ it_behaves_like 'move the accesses'
+ end
+
+ context 'when remove_remaining_elements is false' do
+ let(:target_project) { create(:project, namespace: user.namespace) }
+ let(:options) { { remove_remaining_elements: false } }
+
+ it 'does not remove remaining memberships' do
+ target_project.add_master(master_user)
+
+ subject.execute(project_with_access, options)
+
+ expect(project_with_access.project_members.count).not_to eq 0
+ end
+
+ it 'does not remove remaining group links' do
+ target_project.project_group_links.create(group: master_group, group_access: Gitlab::Access::MASTER)
+
+ subject.execute(project_with_access, options)
+
+ expect(project_with_access.project_group_links.count).not_to eq 0
+ end
+
+ it 'does not remove remaining authorizations' do
+ target_project.add_developer(developer_user)
+
+ subject.execute(project_with_access, options)
+
+ expect(project_with_access.project_authorizations.count).not_to eq 0
+ end
+ end
+ end
+end
diff --git a/spec/services/projects/move_deploy_keys_projects_service_spec.rb b/spec/services/projects/move_deploy_keys_projects_service_spec.rb
new file mode 100644
index 00000000000..c548edf39a8
--- /dev/null
+++ b/spec/services/projects/move_deploy_keys_projects_service_spec.rb
@@ -0,0 +1,58 @@
+require 'spec_helper'
+
+describe Projects::MoveDeployKeysProjectsService do
+ let!(:user) { create(:user) }
+ let!(:project_with_deploy_keys) { create(:project, namespace: user.namespace) }
+ let!(:target_project) { create(:project, namespace: user.namespace) }
+
+ subject { described_class.new(target_project, user) }
+
+ describe '#execute' do
+ before do
+ create_list(:deploy_keys_project, 2, project: project_with_deploy_keys)
+ end
+
+ it 'moves the user\'s deploy keys from one project to another' do
+ expect(project_with_deploy_keys.deploy_keys_projects.count).to eq 2
+ expect(target_project.deploy_keys_projects.count).to eq 0
+
+ subject.execute(project_with_deploy_keys)
+
+ expect(project_with_deploy_keys.deploy_keys_projects.count).to eq 0
+ expect(target_project.deploy_keys_projects.count).to eq 2
+ end
+
+ it 'does not link existent deploy_keys in the current project' do
+ target_project.deploy_keys << project_with_deploy_keys.deploy_keys.first
+
+ expect(project_with_deploy_keys.deploy_keys_projects.count).to eq 2
+ expect(target_project.deploy_keys_projects.count).to eq 1
+
+ subject.execute(project_with_deploy_keys)
+
+ expect(project_with_deploy_keys.deploy_keys_projects.count).to eq 0
+ expect(target_project.deploy_keys_projects.count).to eq 2
+ end
+
+ it 'rollbacks changes if transaction fails' do
+ allow(subject).to receive(:success).and_raise(StandardError)
+
+ expect { subject.execute(project_with_deploy_keys) }.to raise_error(StandardError)
+
+ expect(project_with_deploy_keys.deploy_keys_projects.count).to eq 2
+ expect(target_project.deploy_keys_projects.count).to eq 0
+ end
+
+ context 'when remove_remaining_elements is false' do
+ let(:options) { { remove_remaining_elements: false } }
+
+ it 'does not remove remaining deploy keys projects' do
+ target_project.deploy_keys << project_with_deploy_keys.deploy_keys.first
+
+ subject.execute(project_with_deploy_keys, options)
+
+ expect(project_with_deploy_keys.deploy_keys_projects.count).not_to eq 0
+ end
+ end
+ end
+end
diff --git a/spec/services/projects/move_forks_service_spec.rb b/spec/services/projects/move_forks_service_spec.rb
new file mode 100644
index 00000000000..f4a5a7f9fc2
--- /dev/null
+++ b/spec/services/projects/move_forks_service_spec.rb
@@ -0,0 +1,96 @@
+require 'spec_helper'
+
+describe Projects::MoveForksService do
+ include ProjectForksHelper
+
+ let!(:user) { create(:user) }
+ let!(:project_with_forks) { create(:project, namespace: user.namespace) }
+ let!(:target_project) { create(:project, namespace: user.namespace) }
+ let!(:lvl1_forked_project_1) { fork_project(project_with_forks, user) }
+ let!(:lvl1_forked_project_2) { fork_project(project_with_forks, user) }
+ let!(:lvl2_forked_project_1_1) { fork_project(lvl1_forked_project_1, user) }
+ let!(:lvl2_forked_project_1_2) { fork_project(lvl1_forked_project_1, user) }
+
+ subject { described_class.new(target_project, user) }
+
+ describe '#execute' do
+ context 'when moving a root forked project' do
+ it 'moves the descendant forks' do
+ expect(project_with_forks.forks.count).to eq 2
+ expect(target_project.forks.count).to eq 0
+
+ subject.execute(project_with_forks)
+
+ expect(project_with_forks.forks.count).to eq 0
+ expect(target_project.forks.count).to eq 2
+ expect(lvl1_forked_project_1.forked_from_project).to eq target_project
+ expect(lvl1_forked_project_1.fork_network_member.forked_from_project).to eq target_project
+ expect(lvl1_forked_project_2.forked_from_project).to eq target_project
+ expect(lvl1_forked_project_2.fork_network_member.forked_from_project).to eq target_project
+ end
+
+ it 'updates the fork network' do
+ expect(project_with_forks.fork_network.root_project).to eq project_with_forks
+ expect(project_with_forks.fork_network.fork_network_members.map(&:project)).to include project_with_forks
+
+ subject.execute(project_with_forks)
+
+ expect(target_project.reload.fork_network.root_project).to eq target_project
+ expect(target_project.fork_network.fork_network_members.map(&:project)).not_to include project_with_forks
+ end
+ end
+
+ context 'when moving a intermediate forked project' do
+ it 'moves the descendant forks' do
+ expect(lvl1_forked_project_1.forks.count).to eq 2
+ expect(target_project.forks.count).to eq 0
+
+ subject.execute(lvl1_forked_project_1)
+
+ expect(lvl1_forked_project_1.forks.count).to eq 0
+ expect(target_project.forks.count).to eq 2
+ expect(lvl2_forked_project_1_1.forked_from_project).to eq target_project
+ expect(lvl2_forked_project_1_1.fork_network_member.forked_from_project).to eq target_project
+ expect(lvl2_forked_project_1_2.forked_from_project).to eq target_project
+ expect(lvl2_forked_project_1_2.fork_network_member.forked_from_project).to eq target_project
+ end
+
+ it 'moves the ascendant fork' do
+ subject.execute(lvl1_forked_project_1)
+
+ expect(target_project.forked_from_project).to eq project_with_forks
+ expect(target_project.fork_network_member.forked_from_project).to eq project_with_forks
+ end
+
+ it 'does not update fork network' do
+ subject.execute(lvl1_forked_project_1)
+
+ expect(target_project.reload.fork_network.root_project).to eq project_with_forks
+ end
+ end
+
+ context 'when moving a leaf forked project' do
+ it 'moves the ascendant fork' do
+ subject.execute(lvl2_forked_project_1_1)
+
+ expect(target_project.forked_from_project).to eq lvl1_forked_project_1
+ expect(target_project.fork_network_member.forked_from_project).to eq lvl1_forked_project_1
+ end
+
+ it 'does not update fork network' do
+ subject.execute(lvl2_forked_project_1_1)
+
+ expect(target_project.reload.fork_network.root_project).to eq project_with_forks
+ end
+ end
+
+ it 'rollbacks changes if transaction fails' do
+ allow(subject).to receive(:success).and_raise(StandardError)
+
+ expect { subject.execute(project_with_forks) }.to raise_error(StandardError)
+
+ expect(project_with_forks.forks.count).to eq 2
+ expect(target_project.forks.count).to eq 0
+ end
+ end
+end
diff --git a/spec/services/projects/move_lfs_objects_projects_service_spec.rb b/spec/services/projects/move_lfs_objects_projects_service_spec.rb
new file mode 100644
index 00000000000..517a24a982a
--- /dev/null
+++ b/spec/services/projects/move_lfs_objects_projects_service_spec.rb
@@ -0,0 +1,55 @@
+require 'spec_helper'
+
+describe Projects::MoveLfsObjectsProjectsService do
+ let!(:user) { create(:user) }
+ let!(:project_with_lfs_objects) { create(:project, namespace: user.namespace) }
+ let!(:target_project) { create(:project, namespace: user.namespace) }
+
+ subject { described_class.new(target_project, user) }
+
+ before do
+ create_list(:lfs_objects_project, 3, project: project_with_lfs_objects)
+ end
+
+ describe '#execute' do
+ it 'links the lfs objects from existent in source project' do
+ expect(target_project.lfs_objects.count).to eq 0
+
+ subject.execute(project_with_lfs_objects)
+
+ expect(project_with_lfs_objects.reload.lfs_objects.count).to eq 0
+ expect(target_project.reload.lfs_objects.count).to eq 3
+ end
+
+ it 'does not link existent lfs_object in the current project' do
+ target_project.lfs_objects << project_with_lfs_objects.lfs_objects.first(2)
+
+ expect(target_project.lfs_objects.count).to eq 2
+
+ subject.execute(project_with_lfs_objects)
+
+ expect(target_project.lfs_objects.count).to eq 3
+ end
+
+ it 'rollbacks changes if transaction fails' do
+ allow(subject).to receive(:success).and_raise(StandardError)
+
+ expect { subject.execute(project_with_lfs_objects) }.to raise_error(StandardError)
+
+ expect(project_with_lfs_objects.lfs_objects.count).to eq 3
+ expect(target_project.lfs_objects.count).to eq 0
+ end
+
+ context 'when remove_remaining_elements is false' do
+ let(:options) { { remove_remaining_elements: false } }
+
+ it 'does not remove remaining lfs objects' do
+ target_project.lfs_objects << project_with_lfs_objects.lfs_objects.first(2)
+
+ subject.execute(project_with_lfs_objects, options)
+
+ expect(project_with_lfs_objects.lfs_objects.count).not_to eq 0
+ end
+ end
+ end
+end
diff --git a/spec/services/projects/move_notification_settings_service_spec.rb b/spec/services/projects/move_notification_settings_service_spec.rb
new file mode 100644
index 00000000000..24d69eef86a
--- /dev/null
+++ b/spec/services/projects/move_notification_settings_service_spec.rb
@@ -0,0 +1,56 @@
+require 'spec_helper'
+
+describe Projects::MoveNotificationSettingsService do
+ let(:user) { create(:user) }
+ let(:project_with_notifications) { create(:project, namespace: user.namespace) }
+ let(:target_project) { create(:project, namespace: user.namespace) }
+
+ subject { described_class.new(target_project, user) }
+
+ describe '#execute' do
+ context 'with notification settings' do
+ before do
+ create_list(:notification_setting, 2, source: project_with_notifications)
+ end
+
+ it 'moves the user\'s notification settings from one project to another' do
+ expect(project_with_notifications.notification_settings.count).to eq 3
+ expect(target_project.notification_settings.count).to eq 1
+
+ subject.execute(project_with_notifications)
+
+ expect(project_with_notifications.notification_settings.count).to eq 0
+ expect(target_project.notification_settings.count).to eq 3
+ end
+
+ it 'rollbacks changes if transaction fails' do
+ allow(subject).to receive(:success).and_raise(StandardError)
+
+ expect { subject.execute(project_with_notifications) }.to raise_error(StandardError)
+
+ expect(project_with_notifications.notification_settings.count).to eq 3
+ expect(target_project.notification_settings.count).to eq 1
+ end
+ end
+
+ it 'does not move existent notification settings in the current project' do
+ expect(project_with_notifications.notification_settings.count).to eq 1
+ expect(target_project.notification_settings.count).to eq 1
+ expect(user.notification_settings.count).to eq 2
+
+ subject.execute(project_with_notifications)
+
+ expect(user.notification_settings.count).to eq 1
+ end
+
+ context 'when remove_remaining_elements is false' do
+ let(:options) { { remove_remaining_elements: false } }
+
+ it 'does not remove remaining notification settings' do
+ subject.execute(project_with_notifications, options)
+
+ expect(project_with_notifications.notification_settings.count).not_to eq 0
+ end
+ end
+ end
+end
diff --git a/spec/services/projects/move_project_authorizations_service_spec.rb b/spec/services/projects/move_project_authorizations_service_spec.rb
new file mode 100644
index 00000000000..f7262b9b887
--- /dev/null
+++ b/spec/services/projects/move_project_authorizations_service_spec.rb
@@ -0,0 +1,56 @@
+require 'spec_helper'
+
+describe Projects::MoveProjectAuthorizationsService do
+ let!(:user) { create(:user) }
+ let(:project_with_users) { create(:project, namespace: user.namespace) }
+ let(:target_project) { create(:project, namespace: user.namespace) }
+ let(:master_user) { create(:user) }
+ let(:reporter_user) { create(:user) }
+ let(:developer_user) { create(:user) }
+
+ subject { described_class.new(target_project, user) }
+
+ describe '#execute' do
+ before do
+ project_with_users.add_master(master_user)
+ project_with_users.add_developer(developer_user)
+ project_with_users.add_reporter(reporter_user)
+ end
+
+ it 'moves the authorizations from one project to another' do
+ expect(project_with_users.authorized_users.count).to eq 4
+ expect(target_project.authorized_users.count).to eq 1
+
+ subject.execute(project_with_users)
+
+ expect(project_with_users.authorized_users.count).to eq 0
+ expect(target_project.authorized_users.count).to eq 4
+ end
+
+ it 'does not move existent authorizations to the current project' do
+ target_project.add_master(developer_user)
+ target_project.add_developer(reporter_user)
+
+ expect(project_with_users.authorized_users.count).to eq 4
+ expect(target_project.authorized_users.count).to eq 3
+
+ subject.execute(project_with_users)
+
+ expect(project_with_users.authorized_users.count).to eq 0
+ expect(target_project.authorized_users.count).to eq 4
+ end
+
+ context 'when remove_remaining_elements is false' do
+ let(:options) { { remove_remaining_elements: false } }
+
+ it 'does not remove remaining project authorizations' do
+ target_project.add_master(developer_user)
+ target_project.add_developer(reporter_user)
+
+ subject.execute(project_with_users, options)
+
+ expect(project_with_users.project_authorizations.count).not_to eq 0
+ end
+ end
+ end
+end
diff --git a/spec/services/projects/move_project_group_links_service_spec.rb b/spec/services/projects/move_project_group_links_service_spec.rb
new file mode 100644
index 00000000000..e3d06e6d3d7
--- /dev/null
+++ b/spec/services/projects/move_project_group_links_service_spec.rb
@@ -0,0 +1,65 @@
+require 'spec_helper'
+
+describe Projects::MoveProjectGroupLinksService do
+ let!(:user) { create(:user) }
+ let(:project_with_groups) { create(:project, namespace: user.namespace) }
+ let(:target_project) { create(:project, namespace: user.namespace) }
+ let(:master_group) { create(:group) }
+ let(:reporter_group) { create(:group) }
+ let(:developer_group) { create(:group) }
+
+ subject { described_class.new(target_project, user) }
+
+ describe '#execute' do
+ before do
+ project_with_groups.project_group_links.create(group: master_group, group_access: Gitlab::Access::MASTER)
+ project_with_groups.project_group_links.create(group: developer_group, group_access: Gitlab::Access::DEVELOPER)
+ project_with_groups.project_group_links.create(group: reporter_group, group_access: Gitlab::Access::REPORTER)
+ end
+
+ it 'moves the group links from one project to another' do
+ expect(project_with_groups.project_group_links.count).to eq 3
+ expect(target_project.project_group_links.count).to eq 0
+
+ subject.execute(project_with_groups)
+
+ expect(project_with_groups.project_group_links.count).to eq 0
+ expect(target_project.project_group_links.count).to eq 3
+ end
+
+ it 'does not move existent group links in the current project' do
+ target_project.project_group_links.create(group: master_group, group_access: Gitlab::Access::MASTER)
+ target_project.project_group_links.create(group: developer_group, group_access: Gitlab::Access::DEVELOPER)
+
+ expect(project_with_groups.project_group_links.count).to eq 3
+ expect(target_project.project_group_links.count).to eq 2
+
+ subject.execute(project_with_groups)
+
+ expect(project_with_groups.project_group_links.count).to eq 0
+ expect(target_project.project_group_links.count).to eq 3
+ end
+
+ it 'rollbacks changes if transaction fails' do
+ allow(subject).to receive(:success).and_raise(StandardError)
+
+ expect { subject.execute(project_with_groups) }.to raise_error(StandardError)
+
+ expect(project_with_groups.project_group_links.count).to eq 3
+ expect(target_project.project_group_links.count).to eq 0
+ end
+
+ context 'when remove_remaining_elements is false' do
+ let(:options) { { remove_remaining_elements: false } }
+
+ it 'does not remove remaining project group links' do
+ target_project.project_group_links.create(group: master_group, group_access: Gitlab::Access::MASTER)
+ target_project.project_group_links.create(group: developer_group, group_access: Gitlab::Access::DEVELOPER)
+
+ subject.execute(project_with_groups, options)
+
+ expect(project_with_groups.project_group_links.count).not_to eq 0
+ end
+ end
+ end
+end
diff --git a/spec/services/projects/move_project_members_service_spec.rb b/spec/services/projects/move_project_members_service_spec.rb
new file mode 100644
index 00000000000..9c9a2d2fde1
--- /dev/null
+++ b/spec/services/projects/move_project_members_service_spec.rb
@@ -0,0 +1,65 @@
+require 'spec_helper'
+
+describe Projects::MoveProjectMembersService do
+ let!(:user) { create(:user) }
+ let(:project_with_users) { create(:project, namespace: user.namespace) }
+ let(:target_project) { create(:project, namespace: user.namespace) }
+ let(:master_user) { create(:user) }
+ let(:reporter_user) { create(:user) }
+ let(:developer_user) { create(:user) }
+
+ subject { described_class.new(target_project, user) }
+
+ describe '#execute' do
+ before do
+ project_with_users.add_master(master_user)
+ project_with_users.add_developer(developer_user)
+ project_with_users.add_reporter(reporter_user)
+ end
+
+ it 'moves the members from one project to another' do
+ expect(project_with_users.project_members.count).to eq 4
+ expect(target_project.project_members.count).to eq 1
+
+ subject.execute(project_with_users)
+
+ expect(project_with_users.project_members.count).to eq 0
+ expect(target_project.project_members.count).to eq 4
+ end
+
+ it 'does not move existent members to the current project' do
+ target_project.add_master(developer_user)
+ target_project.add_developer(reporter_user)
+
+ expect(project_with_users.project_members.count).to eq 4
+ expect(target_project.project_members.count).to eq 3
+
+ subject.execute(project_with_users)
+
+ expect(project_with_users.project_members.count).to eq 0
+ expect(target_project.project_members.count).to eq 4
+ end
+
+ it 'rollbacks changes if transaction fails' do
+ allow(subject).to receive(:success).and_raise(StandardError)
+
+ expect { subject.execute(project_with_users) }.to raise_error(StandardError)
+
+ expect(project_with_users.project_members.count).to eq 4
+ expect(target_project.project_members.count).to eq 1
+ end
+
+ context 'when remove_remaining_elements is false' do
+ let(:options) { { remove_remaining_elements: false } }
+
+ it 'does not remove remaining project members' do
+ target_project.add_master(developer_user)
+ target_project.add_developer(reporter_user)
+
+ subject.execute(project_with_users, options)
+
+ expect(project_with_users.project_members.count).not_to eq 0
+ end
+ end
+ end
+end
diff --git a/spec/services/projects/move_users_star_projects_service_spec.rb b/spec/services/projects/move_users_star_projects_service_spec.rb
new file mode 100644
index 00000000000..e0545c5a21b
--- /dev/null
+++ b/spec/services/projects/move_users_star_projects_service_spec.rb
@@ -0,0 +1,42 @@
+require 'spec_helper'
+
+describe Projects::MoveUsersStarProjectsService do
+ let!(:user) { create(:user) }
+ let!(:project_with_stars) { create(:project, namespace: user.namespace) }
+ let!(:target_project) { create(:project, namespace: user.namespace) }
+
+ subject { described_class.new(target_project, user) }
+
+ describe '#execute' do
+ before do
+ create_list(:users_star_project, 2, project: project_with_stars)
+ end
+
+ it 'moves the user\'s stars from one project to another' do
+ expect(project_with_stars.users_star_projects.count).to eq 2
+ expect(project_with_stars.star_count).to eq 2
+ expect(target_project.users_star_projects.count).to eq 0
+ expect(target_project.star_count).to eq 0
+
+ subject.execute(project_with_stars)
+ project_with_stars.reload
+ target_project.reload
+
+ expect(project_with_stars.users_star_projects.count).to eq 0
+ expect(project_with_stars.star_count).to eq 0
+ expect(target_project.users_star_projects.count).to eq 2
+ expect(target_project.star_count).to eq 2
+ end
+
+ it 'rollbacks changes if transaction fails' do
+ allow(subject).to receive(:success).and_raise(StandardError)
+
+ expect { subject.execute(project_with_stars) }.to raise_error(StandardError)
+
+ expect(project_with_stars.users_star_projects.count).to eq 2
+ expect(project_with_stars.star_count).to eq 2
+ expect(target_project.users_star_projects.count).to eq 0
+ expect(target_project.star_count).to eq 0
+ end
+ end
+end
diff --git a/spec/services/projects/overwrite_project_service_spec.rb b/spec/services/projects/overwrite_project_service_spec.rb
new file mode 100644
index 00000000000..252c61f4224
--- /dev/null
+++ b/spec/services/projects/overwrite_project_service_spec.rb
@@ -0,0 +1,198 @@
+require 'spec_helper'
+
+describe Projects::OverwriteProjectService do
+ include ProjectForksHelper
+
+ let(:user) { create(:user) }
+ let(:project_from) { create(:project, namespace: user.namespace) }
+ let(:project_to) { create(:project, namespace: user.namespace) }
+ let!(:lvl1_forked_project_1) { fork_project(project_from, user) }
+ let!(:lvl1_forked_project_2) { fork_project(project_from, user) }
+ let!(:lvl2_forked_project_1_1) { fork_project(lvl1_forked_project_1, user) }
+ let!(:lvl2_forked_project_1_2) { fork_project(lvl1_forked_project_1, user) }
+
+ subject { described_class.new(project_to, user) }
+
+ before do
+ allow(project_to).to receive(:import_data).and_return(double(data: { 'original_path' => project_from.path }))
+ end
+
+ describe '#execute' do
+ shared_examples 'overwrite actions' do
+ it 'moves deploy keys' do
+ deploy_keys_count = project_from.deploy_keys_projects.count
+
+ subject.execute(project_from)
+
+ expect(project_to.deploy_keys_projects.count).to eq deploy_keys_count
+ end
+
+ it 'moves notification settings' do
+ notification_count = project_from.notification_settings.count
+
+ subject.execute(project_from)
+
+ expect(project_to.notification_settings.count).to eq notification_count
+ end
+
+ it 'moves users stars' do
+ stars_count = project_from.users_star_projects.count
+
+ subject.execute(project_from)
+ project_to.reload
+
+ expect(project_to.users_star_projects.count).to eq stars_count
+ expect(project_to.star_count).to eq stars_count
+ end
+
+ it 'moves project group links' do
+ group_links_count = project_from.project_group_links.count
+
+ subject.execute(project_from)
+
+ expect(project_to.project_group_links.count).to eq group_links_count
+ end
+
+ it 'moves memberships and authorizations' do
+ members_count = project_from.project_members.count
+ project_authorizations = project_from.project_authorizations.count
+
+ subject.execute(project_from)
+
+ expect(project_to.project_members.count).to eq members_count
+ expect(project_to.project_authorizations.count).to eq project_authorizations
+ end
+
+ context 'moves lfs objects relationships' do
+ before do
+ create_list(:lfs_objects_project, 3, project: project_from)
+ end
+
+ it do
+ lfs_objects_count = project_from.lfs_objects.count
+
+ subject.execute(project_from)
+
+ expect(project_to.lfs_objects.count).to eq lfs_objects_count
+ end
+ end
+
+ it 'removes the original project' do
+ subject.execute(project_from)
+
+ expect { Project.find(project_from.id) }.to raise_error(ActiveRecord::RecordNotFound)
+ end
+
+ it 'renames the project' do
+ subject.execute(project_from)
+
+ expect(project_to.full_path).to eq project_from.full_path
+ end
+ end
+
+ context 'when project does not have any relation' do
+ it_behaves_like 'overwrite actions'
+ end
+
+ context 'when project with elements' do
+ it_behaves_like 'overwrite actions' do
+ let(:master_user) { create(:user) }
+ let(:reporter_user) { create(:user) }
+ let(:developer_user) { create(:user) }
+ let(:master_group) { create(:group) }
+ let(:reporter_group) { create(:group) }
+ let(:developer_group) { create(:group) }
+
+ before do
+ create_list(:deploy_keys_project, 2, project: project_from)
+ create_list(:notification_setting, 2, source: project_from)
+ create_list(:users_star_project, 2, project: project_from)
+ project_from.project_group_links.create(group: master_group, group_access: Gitlab::Access::MASTER)
+ project_from.project_group_links.create(group: developer_group, group_access: Gitlab::Access::DEVELOPER)
+ project_from.project_group_links.create(group: reporter_group, group_access: Gitlab::Access::REPORTER)
+ project_from.add_master(master_user)
+ project_from.add_developer(developer_user)
+ project_from.add_reporter(reporter_user)
+ end
+ end
+ end
+
+ context 'forks' do
+ context 'when moving a root forked project' do
+ it 'moves the descendant forks' do
+ expect(project_from.forks.count).to eq 2
+ expect(project_to.forks.count).to eq 0
+
+ subject.execute(project_from)
+
+ expect(project_from.forks.count).to eq 0
+ expect(project_to.forks.count).to eq 2
+ expect(lvl1_forked_project_1.forked_from_project).to eq project_to
+ expect(lvl1_forked_project_1.fork_network_member.forked_from_project).to eq project_to
+ expect(lvl1_forked_project_2.forked_from_project).to eq project_to
+ expect(lvl1_forked_project_2.fork_network_member.forked_from_project).to eq project_to
+ end
+
+ it 'updates the fork network' do
+ expect(project_from.fork_network.root_project).to eq project_from
+ expect(project_from.fork_network.fork_network_members.map(&:project)).to include project_from
+
+ subject.execute(project_from)
+
+ expect(project_to.reload.fork_network.root_project).to eq project_to
+ expect(project_to.fork_network.fork_network_members.map(&:project)).not_to include project_from
+ end
+ end
+ context 'when moving a intermediate forked project' do
+ let(:project_to) { create(:project, namespace: lvl1_forked_project_1.namespace) }
+
+ it 'moves the descendant forks' do
+ expect(lvl1_forked_project_1.forks.count).to eq 2
+ expect(project_to.forks.count).to eq 0
+
+ subject.execute(lvl1_forked_project_1)
+
+ expect(lvl1_forked_project_1.forks.count).to eq 0
+ expect(project_to.forks.count).to eq 2
+ expect(lvl2_forked_project_1_1.forked_from_project).to eq project_to
+ expect(lvl2_forked_project_1_1.fork_network_member.forked_from_project).to eq project_to
+ expect(lvl2_forked_project_1_2.forked_from_project).to eq project_to
+ expect(lvl2_forked_project_1_2.fork_network_member.forked_from_project).to eq project_to
+ end
+
+ it 'moves the ascendant fork' do
+ subject.execute(lvl1_forked_project_1)
+
+ expect(project_to.reload.forked_from_project).to eq project_from
+ expect(project_to.fork_network_member.forked_from_project).to eq project_from
+ end
+
+ it 'does not update fork network' do
+ subject.execute(lvl1_forked_project_1)
+
+ expect(project_to.reload.fork_network.root_project).to eq project_from
+ end
+ end
+ end
+
+ context 'if an exception is raised' do
+ it 'rollbacks changes' do
+ updated_at = project_from.updated_at
+
+ allow(subject).to receive(:rename_project).and_raise(StandardError)
+
+ expect { subject.execute(project_from) }.to raise_error(StandardError)
+ expect(Project.find(project_from.id)).not_to be_nil
+ expect(project_from.reload.updated_at.change(usec: 0)).to eq updated_at.change(usec: 0)
+ end
+
+ it 'tries to restore the original project repositories' do
+ allow(subject).to receive(:rename_project).and_raise(StandardError)
+
+ expect(subject).to receive(:attempt_restore_repositories).with(project_from)
+
+ expect { subject.execute(project_from) }.to raise_error(StandardError)
+ end
+ end
+ end
+end
diff --git a/spec/services/projects/transfer_service_spec.rb b/spec/services/projects/transfer_service_spec.rb
index 95a6771c59d..ff9b2372a35 100644
--- a/spec/services/projects/transfer_service_spec.rb
+++ b/spec/services/projects/transfer_service_spec.rb
@@ -37,6 +37,12 @@ describe Projects::TransferService do
transfer_project(project, user, group)
end
+ it 'invalidates the user\'s personal_project_count cache' do
+ expect(user).to receive(:invalidate_personal_projects_count)
+
+ transfer_project(project, user, group)
+ end
+
it 'executes system hooks' do
transfer_project(project, user, group) do |service|
expect(service).to receive(:execute_system_hooks)
diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb
index 934106627a9..1b6caeab15d 100644
--- a/spec/services/projects/update_pages_service_spec.rb
+++ b/spec/services/projects/update_pages_service_spec.rb
@@ -21,75 +21,72 @@ describe Projects::UpdatePagesService do
end
context 'legacy artifacts' do
- %w(tar.gz zip).each do |format|
- let(:extension) { format }
+ let(:extension) { 'zip' }
- context "for valid #{format}" do
+ before do
+ build.update_attributes(legacy_artifacts_file: file)
+ build.update_attributes(legacy_artifacts_metadata: metadata)
+ end
+
+ describe 'pages artifacts' do
+ context 'with expiry date' do
before do
- build.update_attributes(legacy_artifacts_file: file)
- build.update_attributes(legacy_artifacts_metadata: metadata)
+ build.artifacts_expire_in = "2 days"
+ build.save!
end
- describe 'pages artifacts' do
- context 'with expiry date' do
- before do
- build.artifacts_expire_in = "2 days"
- build.save!
- end
-
- it "doesn't delete artifacts" do
- expect(execute).to eq(:success)
-
- expect(build.reload.artifacts?).to eq(true)
- end
- end
-
- context 'without expiry date' do
- it "does delete artifacts" do
- expect(execute).to eq(:success)
-
- expect(build.reload.artifacts?).to eq(false)
- end
- end
- end
-
- it 'succeeds' do
- expect(project.pages_deployed?).to be_falsey
+ it "doesn't delete artifacts" do
expect(execute).to eq(:success)
- expect(project.pages_deployed?).to be_truthy
- # Check that all expected files are extracted
- %w[index.html zero .hidden/file].each do |filename|
- expect(File.exist?(File.join(project.public_pages_path, filename))).to be_truthy
- end
- end
-
- it 'limits pages size' do
- stub_application_setting(max_pages_size: 1)
- expect(execute).not_to eq(:success)
- end
-
- it 'removes pages after destroy' do
- expect(PagesWorker).to receive(:perform_in)
- expect(project.pages_deployed?).to be_falsey
- expect(execute).to eq(:success)
- expect(project.pages_deployed?).to be_truthy
- project.destroy
- expect(project.pages_deployed?).to be_falsey
- end
-
- it 'fails if sha on branch is not latest' do
- build.update_attributes(ref: 'feature')
-
- expect(execute).not_to eq(:success)
- end
-
- it 'fails for empty file fails' do
- build.update_attributes(legacy_artifacts_file: empty_file)
-
- expect(execute).not_to eq(:success)
+ expect(build.reload.artifacts?).to eq(true)
end
end
+
+ context 'without expiry date' do
+ it "does delete artifacts" do
+ expect(execute).to eq(:success)
+
+ expect(build.reload.artifacts?).to eq(false)
+ end
+ end
+ end
+
+ it 'succeeds' do
+ expect(project.pages_deployed?).to be_falsey
+ expect(execute).to eq(:success)
+ expect(project.pages_deployed?).to be_truthy
+
+ # Check that all expected files are extracted
+ %w[index.html zero .hidden/file].each do |filename|
+ expect(File.exist?(File.join(project.public_pages_path, filename))).to be_truthy
+ end
+ end
+
+ it 'limits pages size' do
+ stub_application_setting(max_pages_size: 1)
+ expect(execute).not_to eq(:success)
+ end
+
+ it 'removes pages after destroy' do
+ expect(PagesWorker).to receive(:perform_in)
+ expect(project.pages_deployed?).to be_falsey
+ expect(execute).to eq(:success)
+ expect(project.pages_deployed?).to be_truthy
+ project.destroy
+ expect(project.pages_deployed?).to be_falsey
+ end
+
+ it 'fails if sha on branch is not latest' do
+ build.update_attributes(ref: 'feature')
+
+ expect(execute).not_to eq(:success)
+ end
+
+ it 'fails for empty file fails' do
+ build.update_attributes(legacy_artifacts_file: empty_file)
+
+ expect { execute }
+ .to raise_error(Projects::UpdatePagesService::FailedToExtractError)
end
end
@@ -159,7 +156,8 @@ describe Projects::UpdatePagesService do
it 'fails for empty file fails' do
build.job_artifacts_archive.update_attributes(file: empty_file)
- expect(execute).not_to eq(:success)
+ expect { execute }
+ .to raise_error(Projects::UpdatePagesService::FailedToExtractError)
end
context 'when timeout happens by DNS error' do
@@ -172,7 +170,39 @@ describe Projects::UpdatePagesService do
expect { execute }.to raise_error(SocketError)
build.reload
- expect(build.artifacts?).to eq(true)
+ expect(deploy_status).to be_failed
+ expect(build.artifacts?).to be_truthy
+ end
+ end
+
+ context 'when failed to extract zip artifacts' do
+ before do
+ allow_any_instance_of(described_class)
+ .to receive(:extract_zip_archive!)
+ .and_raise(Projects::UpdatePagesService::FailedToExtractError)
+ end
+
+ it 'raises an error' do
+ expect { execute }
+ .to raise_error(Projects::UpdatePagesService::FailedToExtractError)
+
+ build.reload
+ expect(deploy_status).to be_failed
+ expect(build.artifacts?).to be_truthy
+ end
+ end
+
+ context 'when missing artifacts metadata' do
+ before do
+ allow(build).to receive(:artifacts_metadata?).and_return(false)
+ end
+
+ it 'does not raise an error and remove artifacts as failed job' do
+ execute
+
+ build.reload
+ expect(deploy_status).to be_failed
+ expect(build.artifacts?).to be_falsey
end
end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index e8cecf361ff..83664bae046 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -66,6 +66,7 @@ RSpec.configure do |config|
config.include MigrationsHelpers, :migration
config.include StubFeatureFlags
config.include StubENV
+ config.include ExpectOffense
config.infer_spec_type_from_file_location!
@@ -108,7 +109,8 @@ RSpec.configure do |config|
allow_any_instance_of(Gitlab::Git::GitlabProjects).to receive(:fork_repository).and_wrap_original do |m, *args|
m.call(*args)
- shard_path, repository_relative_path = args
+ shard_name, repository_relative_path = args
+ shard_path = Gitlab.config.repositories.storages.fetch(shard_name).legacy_disk_path
# We can't leave the hooks in place after a fork, as those would fail in tests
# The "internal" API is not available
FileUtils.rm_rf(File.join(shard_path, repository_relative_path, 'hooks'))
diff --git a/spec/support/bare_repo_operations.rb b/spec/support/bare_repo_operations.rb
index 8eeaa37d3c5..3f4a4243cb6 100644
--- a/spec/support/bare_repo_operations.rb
+++ b/spec/support/bare_repo_operations.rb
@@ -1,19 +1,15 @@
require 'zlib'
class BareRepoOperations
- # The ID of empty tree.
- # See http://stackoverflow.com/a/40884093/1856239 and https://github.com/git/git/blob/3ad8b5bf26362ac67c9020bf8c30eee54a84f56d/cache.h#L1011-L1012
- EMPTY_TREE_ID = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'.freeze
-
include Gitlab::Popen
def initialize(path_to_repo)
@path_to_repo = path_to_repo
end
- def commit_tree(tree_id, msg, parent: EMPTY_TREE_ID)
+ def commit_tree(tree_id, msg, parent: Gitlab::Git::EMPTY_TREE_ID)
commit_tree_args = ['commit-tree', tree_id, '-m', msg]
- commit_tree_args += ['-p', parent] unless parent == EMPTY_TREE_ID
+ commit_tree_args += ['-p', parent] unless parent == Gitlab::Git::EMPTY_TREE_ID
commit_id = execute(commit_tree_args)
commit_id[0]
@@ -21,7 +17,7 @@ class BareRepoOperations
# Based on https://stackoverflow.com/a/25556917/1856239
def commit_file(file, dst_path, branch = 'master')
- head_id = execute(['show', '--format=format:%H', '--no-patch', branch], allow_failure: true)[0] || EMPTY_TREE_ID
+ head_id = execute(['show', '--format=format:%H', '--no-patch', branch], allow_failure: true)[0] || Gitlab::Git::EMPTY_TREE_ID
execute(['read-tree', '--empty'])
execute(['read-tree', head_id])
diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb
index 8603b7f3e2c..9ddcc5f2fbf 100644
--- a/spec/support/capybara.rb
+++ b/spec/support/capybara.rb
@@ -7,6 +7,16 @@ require 'selenium-webdriver'
# Give CI some extra time
timeout = (ENV['CI'] || ENV['CI_SERVER']) ? 60 : 30
+# Define an error class for JS console messages
+JSConsoleError = Class.new(StandardError)
+
+# Filter out innocuous JS console messages
+JS_CONSOLE_FILTER = Regexp.union([
+ '"[HMR] Waiting for update signal from WDS..."',
+ '"[WDS] Hot Module Replacement enabled."',
+ "Download the Vue Devtools extension"
+])
+
Capybara.register_driver :chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
# This enables access to logs with `page.driver.manage.get_log(:browser)`
@@ -25,13 +35,7 @@ Capybara.register_driver :chrome do |app|
options.add_argument("no-sandbox")
# Run headless by default unless CHROME_HEADLESS specified
- unless ENV['CHROME_HEADLESS'] =~ /^(false|no|0)$/i
- options.add_argument("headless")
-
- # Chrome documentation says this flag is needed for now
- # https://developers.google.com/web/updates/2017/04/headless-chrome#cli
- options.add_argument("disable-gpu")
- end
+ options.add_argument("headless") unless ENV['CHROME_HEADLESS'] =~ /^(false|no|0)$/i
# Disable /dev/shm use in CI. See https://gitlab.com/gitlab-org/gitlab-ee/issues/4252
options.add_argument("disable-dev-shm-usage") if ENV['CI'] || ENV['CI_SERVER']
@@ -78,6 +82,15 @@ RSpec.configure do |config|
end
config.after(:example, :js) do |example|
+ # when a test fails, display any messages in the browser's console
+ if example.exception
+ console = page.driver.browser.manage.logs.get(:browser)&.reject { |log| log.message =~ JS_CONSOLE_FILTER }
+ if console.present?
+ message = "Unexpected browser console output:\n" + console.map(&:message).join("\n")
+ raise JSConsoleError, message
+ end
+ end
+
# prevent localStorage from introducing side effects based on test order
unless ['', 'about:blank', 'data:,'].include? Capybara.current_session.driver.browser.current_url
execute_script("localStorage.clear();")
diff --git a/spec/support/commit_trailers_spec_helper.rb b/spec/support/commit_trailers_spec_helper.rb
new file mode 100644
index 00000000000..add359946db
--- /dev/null
+++ b/spec/support/commit_trailers_spec_helper.rb
@@ -0,0 +1,41 @@
+module CommitTrailersSpecHelper
+ extend ActiveSupport::Concern
+
+ def expect_to_have_user_link_with_avatar(doc, user:, trailer:, email: nil)
+ wrapper = find_user_wrapper(doc, trailer)
+
+ expect_to_have_links_with_url_and_avatar(wrapper, urls.user_url(user), email || user.email)
+ expect(wrapper.attribute('data-user').value).to eq user.id.to_s
+ end
+
+ def expect_to_have_mailto_link(doc, email:, trailer:)
+ wrapper = find_user_wrapper(doc, trailer)
+
+ expect_to_have_links_with_url_and_avatar(wrapper, "mailto:#{CGI.escape_html(email)}", email)
+ end
+
+ def expect_to_have_links_with_url_and_avatar(doc, url, email)
+ expect(doc).not_to be_nil
+ expect(doc.xpath("a[position()<3 and @href='#{url}']").size).to eq 2
+ expect(doc.xpath("a[position()=3 and @href='mailto:#{CGI.escape_html(email)}']").size).to eq 1
+ expect(doc.css('img').size).to eq 1
+ end
+
+ def find_user_wrapper(doc, trailer)
+ doc.xpath("descendant-or-self::node()[@data-trailer='#{trailer}']").first
+ end
+
+ def build_commit_message(trailer:, name:, email:)
+ message = trailer_line(trailer, name, email)
+
+ [message, commit_html(message)]
+ end
+
+ def trailer_line(trailer, name, email)
+ "#{trailer} #{name} <#{email}>"
+ end
+
+ def commit_html(message)
+ "
#{CGI.escape_html(message)}
"
+ end
+end
diff --git a/spec/support/features/discussion_comments_shared_example.rb b/spec/support/features/discussion_comments_shared_example.rb
index c8662d41769..80604395adf 100644
--- a/spec/support/features/discussion_comments_shared_example.rb
+++ b/spec/support/features/discussion_comments_shared_example.rb
@@ -81,7 +81,10 @@ shared_examples 'discussion comments' do |resource_name|
# on issues page, the menu closes when clicking anywhere, on other pages it will
# remain open if clicking divider or menu padding, but should not change button action
- if resource_name == 'issue'
+ #
+ # if dropdown menu is not toggled (and also not present),
+ # it's "issue-type" dropdown
+ if first(menu_selector).nil?
expect(find(dropdown_selector)).to have_content 'Comment'
find(toggle_selector).click
@@ -107,8 +110,10 @@ shared_examples 'discussion comments' do |resource_name|
end
it 'updates the submit button text and closes the dropdown' do
+ button = find(submit_selector)
+
# on issues page, the submit input is a , on other pages it is
- if resource_name == 'issue'
+ if button.tag_name == 'button'
expect(find(submit_selector)).to have_content 'Start discussion'
else
expect(find(submit_selector).value).to eq 'Start discussion'
@@ -132,6 +137,8 @@ shared_examples 'discussion comments' do |resource_name|
describe 'creating a discussion' do
before do
find(submit_selector).click
+ wait_for_requests
+
find(comments_selector, match: :first)
end
@@ -197,11 +204,13 @@ shared_examples 'discussion comments' do |resource_name|
end
it 'updates the submit button text and closes the dropdown' do
+ button = find(submit_selector)
+
# on issues page, the submit input is a , on other pages it is
- if resource_name == 'issue'
- expect(find(submit_selector)).to have_content 'Comment'
+ if button.tag_name == 'button'
+ expect(button).to have_content 'Comment'
else
- expect(find(submit_selector).value).to eq 'Comment'
+ expect(button.value).to eq 'Comment'
end
expect(page).not_to have_selector menu_selector
diff --git a/spec/support/filter_spec_helper.rb b/spec/support/filter_spec_helper.rb
index b871b7ffc90..721d359c2ee 100644
--- a/spec/support/filter_spec_helper.rb
+++ b/spec/support/filter_spec_helper.rb
@@ -18,6 +18,11 @@ module FilterSpecHelper
context.reverse_merge!(project: project)
end
+ render_context = Banzai::RenderContext
+ .new(context[:project], context[:current_user])
+
+ context = context.merge(render_context: render_context)
+
described_class.call(html, context)
end
diff --git a/spec/support/filtered_search_helpers.rb b/spec/support/filtered_search_helpers.rb
index f3f96bd1f0a..5f42ff77fb2 100644
--- a/spec/support/filtered_search_helpers.rb
+++ b/spec/support/filtered_search_helpers.rb
@@ -21,6 +21,29 @@ module FilteredSearchHelpers
end
end
+ # Select a label clicking in the search dropdown instead
+ # of entering label names on the input.
+ def select_label_on_dropdown(label_title)
+ input_filtered_search("label:", submit: false)
+
+ within('#js-dropdown-label') do
+ wait_for_requests
+
+ find('li', text: label_title).click
+ end
+
+ filtered_search.send_keys(:enter)
+ end
+
+ def expect_issues_list_count(open_count, closed_count = 0)
+ all_count = open_count + closed_count
+
+ expect(page).to have_issuable_counts(open: open_count, closed: closed_count, all: all_count)
+ page.within '.issues-list' do
+ expect(page).to have_selector('.issue', count: open_count)
+ end
+ end
+
# Enables input to be added character by character
def input_filtered_search_keys(search_term)
# Add an extra space to engage visual tokens
diff --git a/spec/support/helpers/expect_offense.rb b/spec/support/helpers/expect_offense.rb
new file mode 100644
index 00000000000..35718ba90c5
--- /dev/null
+++ b/spec/support/helpers/expect_offense.rb
@@ -0,0 +1,20 @@
+require 'rubocop/rspec/support'
+
+# https://github.com/backus/rubocop-rspec/blob/master/spec/support/expect_offense.rb
+# rubocop-rspec gem extension of RuboCop's ExpectOffense module.
+#
+# This mixin is the same as rubocop's ExpectOffense except the default
+# filename ends with `_spec.rb`
+module ExpectOffense
+ include RuboCop::RSpec::ExpectOffense
+
+ DEFAULT_FILENAME = 'example_spec.rb'.freeze
+
+ def expect_offense(source, filename = DEFAULT_FILENAME)
+ super
+ end
+
+ def expect_no_offenses(source, filename = DEFAULT_FILENAME)
+ super
+ end
+end
diff --git a/spec/support/helpers/features/branches_helpers.rb b/spec/support/helpers/features/branches_helpers.rb
new file mode 100644
index 00000000000..3525d9a70a7
--- /dev/null
+++ b/spec/support/helpers/features/branches_helpers.rb
@@ -0,0 +1,33 @@
+# These helpers allow you to manipulate with sorting features.
+#
+# Usage:
+# describe "..." do
+# include Spec::Support::Helpers::Features::BranchesHelpers
+# ...
+#
+# create_branch("feature")
+# select_branch("master")
+#
+module Spec
+ module Support
+ module Helpers
+ module Features
+ module BranchesHelpers
+ def create_branch(branch_name, source_branch_name = "master")
+ fill_in("branch_name", with: branch_name)
+ select_branch(source_branch_name)
+ click_button("Create branch")
+ end
+
+ def select_branch(branch_name)
+ find(".git-revision-dropdown-toggle").click
+
+ page.within("#new-branch-form .dropdown-menu") do
+ click_link(branch_name)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/support/issuables_list_metadata_shared_examples.rb b/spec/support/issuables_list_metadata_shared_examples.rb
index 75982432ab4..e61983c60b4 100644
--- a/spec/support/issuables_list_metadata_shared_examples.rb
+++ b/spec/support/issuables_list_metadata_shared_examples.rb
@@ -5,9 +5,9 @@ shared_examples 'issuables list meta-data' do |issuable_type, action = nil|
%w[fix improve/awesome].each do |source_branch|
issuable =
if issuable_type == :issue
- create(issuable_type, project: project)
+ create(issuable_type, project: project, author: project.creator)
else
- create(issuable_type, source_project: project, source_branch: source_branch)
+ create(issuable_type, source_project: project, source_branch: source_branch, author: project.creator)
end
@issuable_ids << issuable.id
@@ -16,7 +16,7 @@ shared_examples 'issuables list meta-data' do |issuable_type, action = nil|
it "creates indexed meta-data object for issuable notes and votes count" do
if action
- get action
+ get action, author_id: project.creator.id
else
get :index, namespace_id: project.namespace, project_id: project
end
@@ -35,7 +35,7 @@ shared_examples 'issuables list meta-data' do |issuable_type, action = nil|
it "doesn't execute any queries with false conditions" do
get_action =
if action
- proc { get action }
+ proc { get action, author_id: project.creator.id }
else
proc { get :index, namespace_id: project2.namespace, project_id: project2 }
end
diff --git a/spec/support/issuables_requiring_filter_shared_examples.rb b/spec/support/issuables_requiring_filter_shared_examples.rb
new file mode 100644
index 00000000000..439ef5ed92e
--- /dev/null
+++ b/spec/support/issuables_requiring_filter_shared_examples.rb
@@ -0,0 +1,15 @@
+shared_examples 'issuables requiring filter' do |action|
+ it "doesn't load any issuables if no filter is set" do
+ expect_any_instance_of(described_class).not_to receive(:issuables_collection)
+
+ get action
+
+ expect(response).to render_template(action)
+ end
+
+ it "loads issuables if at least one filter is set" do
+ expect_any_instance_of(described_class).to receive(:issuables_collection).and_call_original
+
+ get action, author_id: user.id
+ end
+end
diff --git a/spec/support/ldap_helpers.rb b/spec/support/ldap_helpers.rb
index 081ce0ad7b7..0e87b3d359d 100644
--- a/spec/support/ldap_helpers.rb
+++ b/spec/support/ldap_helpers.rb
@@ -41,4 +41,9 @@ module LdapHelpers
entry
end
+
+ def raise_ldap_connection_error
+ allow_any_instance_of(Gitlab::Auth::LDAP::Adapter)
+ .to receive(:ldap_search).and_raise(Gitlab::Auth::LDAP::LDAPConnectionError)
+ end
end
diff --git a/spec/support/matchers/have_emoji.rb b/spec/support/matchers/have_emoji.rb
new file mode 100644
index 00000000000..23fb8e9c1c4
--- /dev/null
+++ b/spec/support/matchers/have_emoji.rb
@@ -0,0 +1,5 @@
+RSpec::Matchers.define :have_emoji do |emoji_name|
+ match do |actual|
+ expect(actual).to have_selector("gl-emoji[data-name='#{emoji_name}']")
+ end
+end
diff --git a/spec/support/reference_parser_helpers.rb b/spec/support/reference_parser_helpers.rb
index 01689194eac..c01897ed1a1 100644
--- a/spec/support/reference_parser_helpers.rb
+++ b/spec/support/reference_parser_helpers.rb
@@ -2,4 +2,38 @@ module ReferenceParserHelpers
def empty_html_link
Nokogiri::HTML.fragment('').children[0]
end
+
+ shared_examples 'no N+1 queries' do
+ it 'avoids N+1 queries in #nodes_visible_to_user', :request_store do
+ context = Banzai::RenderContext.new(project, user)
+
+ record_queries = lambda do |links|
+ ActiveRecord::QueryRecorder.new do
+ described_class.new(context).nodes_visible_to_user(user, links)
+ end
+ end
+
+ control = record_queries.call(control_links)
+ actual = record_queries.call(actual_links)
+
+ expect(actual.count).to be <= control.count
+ expect(actual.cached_count).to be <= control.cached_count
+ end
+
+ it 'avoids N+1 queries in #records_for_nodes', :request_store do
+ context = Banzai::RenderContext.new(project, user)
+
+ record_queries = lambda do |links|
+ ActiveRecord::QueryRecorder.new do
+ described_class.new(context).records_for_nodes(links)
+ end
+ end
+
+ control = record_queries.call(control_links)
+ actual = record_queries.call(actual_links)
+
+ expect(actual.count).to be <= control.count
+ expect(actual.cached_count).to be <= control.cached_count
+ end
+ end
end
diff --git a/spec/support/shared_examples/serializers/note_entity_examples.rb b/spec/support/shared_examples/serializers/note_entity_examples.rb
new file mode 100644
index 00000000000..9097c8e5513
--- /dev/null
+++ b/spec/support/shared_examples/serializers/note_entity_examples.rb
@@ -0,0 +1,42 @@
+shared_examples 'note entity' do
+ subject { entity.as_json }
+
+ context 'basic note' do
+ it 'exposes correct elements' do
+ expect(subject).to include(:type, :author, :note, :note_html, :current_user,
+ :discussion_id, :emoji_awardable, :award_emoji, :report_abuse_path, :attachment)
+ end
+
+ it 'does not expose elements for specific notes cases' do
+ expect(subject).not_to include(:last_edited_by, :last_edited_at, :system_note_icon_name)
+ end
+
+ it 'exposes author correctly' do
+ expect(subject[:author]).to include(:id, :name, :username, :state, :avatar_url, :path)
+ end
+
+ it 'does not expose web_url for author' do
+ expect(subject[:author]).not_to include(:web_url)
+ end
+ end
+
+ context 'when note was edited' do
+ before do
+ note.update(updated_at: 1.minute.from_now, updated_by: user)
+ end
+
+ it 'exposes last_edited_at and last_edited_by elements' do
+ expect(subject).to include(:last_edited_at, :last_edited_by)
+ end
+ end
+
+ context 'when note is a system note' do
+ before do
+ note.update(system: true)
+ end
+
+ it 'exposes system_note_icon_name element' do
+ expect(subject).to include(:system_note_icon_name)
+ end
+ end
+end
diff --git a/spec/support/shared_examples/services/boards/issues_move_service.rb b/spec/support/shared_examples/services/boards/issues_move_service.rb
index 4a4fbaa3a0e..737863ea411 100644
--- a/spec/support/shared_examples/services/boards/issues_move_service.rb
+++ b/spec/support/shared_examples/services/boards/issues_move_service.rb
@@ -1,4 +1,4 @@
-shared_examples 'issues move service' do
+shared_examples 'issues move service' do |group|
context 'when moving an issue between lists' do
let(:issue) { create(:labeled_issue, project: project, labels: [bug, development]) }
let(:params) { { board_id: board1.id, from_list_id: list1.id, to_list_id: list2.id } }
@@ -83,5 +83,18 @@ shared_examples 'issues move service' do
expect(issue.relative_position).to be_between(issue1.relative_position, issue2.relative_position)
end
+
+ if group
+ context 'when on a group board' do
+ it 'sends the board_group_id parameter' do
+ params.merge!(move_after_id: issue1.id, move_before_id: issue2.id)
+
+ match_params = { move_between_ids: [issue1.id, issue2.id], board_group_id: parent.id }
+ expect(Issues::UpdateService).to receive(:new).with(issue.project, user, match_params).and_return(double(execute: build(:issue)))
+
+ described_class.new(parent, user, params).execute(issue)
+ end
+ end
+ end
end
end
diff --git a/spec/support/slack_mattermost_notifications_shared_examples.rb b/spec/support/slack_mattermost_notifications_shared_examples.rb
index 5e1ce19eafb..07bc3a51fd8 100644
--- a/spec/support/slack_mattermost_notifications_shared_examples.rb
+++ b/spec/support/slack_mattermost_notifications_shared_examples.rb
@@ -4,6 +4,11 @@ RSpec.shared_examples 'slack or mattermost notifications' do
let(:chat_service) { described_class.new }
let(:webhook_url) { 'https://example.gitlab.com/' }
+ def execute_with_options(options)
+ receive(:new).with(webhook_url, options)
+ .and_return(double(:slack_service).as_null_object)
+ end
+
describe "Associations" do
it { is_expected.to belong_to :project }
it { is_expected.to have_one :service_hook }
@@ -33,6 +38,7 @@ RSpec.shared_examples 'slack or mattermost notifications' do
let(:project) { create(:project, :repository) }
let(:username) { 'slack_username' }
let(:channel) { 'slack_channel' }
+ let(:issue_service_options) { { title: 'Awesome issue', description: 'please fix' } }
let(:push_sample_data) do
Gitlab::DataBuilder::Push.build_sample(project, user)
@@ -48,12 +54,7 @@ RSpec.shared_examples 'slack or mattermost notifications' do
WebMock.stub_request(:post, webhook_url)
- opts = {
- title: 'Awesome issue',
- description: 'please fix'
- }
-
- issue_service = Issues::CreateService.new(project, user, opts)
+ issue_service = Issues::CreateService.new(project, user, issue_service_options)
@issue = issue_service.execute
@issues_sample_data = issue_service.hook_data(@issue, 'open')
@@ -164,6 +165,26 @@ RSpec.shared_examples 'slack or mattermost notifications' do
chat_service.execute(@issues_sample_data)
end
+ context 'for confidential issues' do
+ let(:issue_service_options) { { title: 'Secret', confidential: true } }
+
+ it "uses confidential issue channel" do
+ chat_service.update_attributes(confidential_issue_channel: 'confidential')
+
+ expect(Slack::Notifier).to execute_with_options(channel: 'confidential')
+
+ chat_service.execute(@issues_sample_data)
+ end
+
+ it 'falls back to issue channel' do
+ chat_service.update_attributes(issue_channel: 'fallback_channel')
+
+ expect(Slack::Notifier).to execute_with_options(channel: 'fallback_channel')
+
+ chat_service.execute(@issues_sample_data)
+ end
+ end
+
it "uses the right channel for wiki event" do
chat_service.update_attributes(wiki_page_channel: "random")
@@ -194,6 +215,32 @@ RSpec.shared_examples 'slack or mattermost notifications' do
chat_service.execute(note_data)
end
+
+ context 'for confidential notes' do
+ before do
+ issue_note.noteable.update!(confidential: true)
+ end
+
+ it "uses confidential channel" do
+ chat_service.update_attributes(confidential_note_channel: "confidential")
+
+ note_data = Gitlab::DataBuilder::Note.build(issue_note, user)
+
+ expect(Slack::Notifier).to execute_with_options(channel: 'confidential')
+
+ chat_service.execute(note_data)
+ end
+
+ it 'falls back to note channel' do
+ chat_service.update_attributes(note_channel: "fallback_channel")
+
+ note_data = Gitlab::DataBuilder::Note.build(issue_note, user)
+
+ expect(Slack::Notifier).to execute_with_options(channel: 'fallback_channel')
+
+ chat_service.execute(note_data)
+ end
+ end
end
end
end
@@ -248,8 +295,9 @@ RSpec.shared_examples 'slack or mattermost notifications' do
create(:note_on_issue, project: project, note: "issue note")
end
+ let(:data) { Gitlab::DataBuilder::Note.build(issue_note, user) }
+
it "calls Slack API for issue comment events" do
- data = Gitlab::DataBuilder::Note.build(issue_note, user)
chat_service.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
diff --git a/spec/support/stub_configuration.rb b/spec/support/stub_configuration.rb
index bad1d34df3a..a75a3eaefcb 100644
--- a/spec/support/stub_configuration.rb
+++ b/spec/support/stub_configuration.rb
@@ -45,6 +45,10 @@ module StubConfiguration
allow(Gitlab.config.lfs).to receive_messages(to_settings(messages))
end
+ def stub_artifacts_setting(messages)
+ allow(Gitlab.config.artifacts).to receive_messages(to_settings(messages))
+ end
+
def stub_storage_settings(messages)
messages.deep_stringify_keys!
diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb
index f14e69b1041..d87f265cdf0 100644
--- a/spec/support/test_env.rb
+++ b/spec/support/test_env.rb
@@ -62,6 +62,7 @@ module TestEnv
}.freeze
TMP_TEST_PATH = Rails.root.join('tmp', 'tests', '**')
+ REPOS_STORAGE = 'default'.freeze
# Test environment
#
@@ -225,7 +226,7 @@ module TestEnv
end
def repos_path
- Gitlab.config.repositories.storages.default.legacy_disk_path
+ Gitlab.config.repositories.storages[REPOS_STORAGE].legacy_disk_path
end
def backup_path
diff --git a/spec/tasks/cache/clear/redis_spec.rb b/spec/tasks/cache/clear/redis_spec.rb
new file mode 100644
index 00000000000..cca2b864e9b
--- /dev/null
+++ b/spec/tasks/cache/clear/redis_spec.rb
@@ -0,0 +1,19 @@
+require 'rake_helper'
+
+describe 'clearing redis cache' do
+ before do
+ Rake.application.rake_require 'tasks/cache'
+ end
+
+ describe 'clearing pipeline status cache' do
+ let(:pipeline_status) { create(:ci_pipeline).project.pipeline_status }
+
+ before do
+ allow(pipeline_status).to receive(:loaded).and_return(nil)
+ end
+
+ it 'clears pipeline status cache' do
+ expect { run_rake_task('cache:clear:redis') }.to change { pipeline_status.has_cache? }
+ end
+ end
+end
diff --git a/spec/uploaders/object_storage_spec.rb b/spec/uploaders/object_storage_spec.rb
index 59e02fecbce..16455e2517b 100644
--- a/spec/uploaders/object_storage_spec.rb
+++ b/spec/uploaders/object_storage_spec.rb
@@ -62,10 +62,12 @@ describe ObjectStorage do
end
describe '#object_store' do
+ subject { uploader.object_store }
+
it "delegates to _store on model" do
expect(object).to receive(:file_store)
- uploader.object_store
+ subject
end
context 'when store is null' do
@@ -73,8 +75,36 @@ describe ObjectStorage do
expect(object).to receive(:file_store).and_return(nil)
end
- it "returns Store::LOCAL" do
- expect(uploader.object_store).to eq(described_class::Store::LOCAL)
+ context 'when object storage is enabled' do
+ context 'when direct uploads are enabled' do
+ before do
+ stub_uploads_object_storage(uploader_class, enabled: true, direct_upload: true)
+ end
+
+ it "uses Store::REMOTE" do
+ is_expected.to eq(described_class::Store::REMOTE)
+ end
+ end
+
+ context 'when direct uploads are disabled' do
+ before do
+ stub_uploads_object_storage(uploader_class, enabled: true, direct_upload: false)
+ end
+
+ it "uses Store::LOCAL" do
+ is_expected.to eq(described_class::Store::LOCAL)
+ end
+ end
+ end
+
+ context 'when object storage is disabled' do
+ before do
+ stub_uploads_object_storage(uploader_class, enabled: false)
+ end
+
+ it "uses Store::LOCAL" do
+ is_expected.to eq(described_class::Store::LOCAL)
+ end
end
end
@@ -84,7 +114,7 @@ describe ObjectStorage do
end
it "returns the given value" do
- expect(uploader.object_store).to eq(described_class::Store::REMOTE)
+ is_expected.to eq(described_class::Store::REMOTE)
end
end
end
@@ -486,108 +516,46 @@ describe ObjectStorage do
end
end
- describe '#store_workhorse_file!' do
+ describe '#cache!' do
subject do
- uploader.store_workhorse_file!(params, :file)
+ uploader.cache!(uploaded_file)
end
context 'when local file is used' do
context 'when valid file is used' do
- let(:target_path) do
- File.join(uploader_class.root, uploader_class::TMP_UPLOAD_PATH)
+ let(:uploaded_file) do
+ fixture_file_upload(Rails.root + 'spec/fixtures/rails_sample.jpg', 'image/jpg')
end
- before do
- FileUtils.mkdir_p(target_path)
- end
+ it "properly caches the file" do
+ subject
- context 'when no filename is specified' do
- let(:params) do
- { "file.path" => "test/file" }
- end
-
- it 'raises an error' do
- expect { subject }.to raise_error(uploader_class::RemoteStoreError, /Missing filename/)
- end
- end
-
- context 'when invalid file is specified' do
- let(:file_path) do
- File.join(target_path, "..", "test.file")
- end
-
- before do
- FileUtils.touch(file_path)
- end
-
- let(:params) do
- { "file.path" => file_path,
- "file.name" => "my_file.txt" }
- end
-
- it 'raises an error' do
- expect { subject }.to raise_error(uploader_class::RemoteStoreError, /Bad file path/)
- end
- end
-
- context 'when filename is specified' do
- let(:params) do
- { "file.path" => tmp_file,
- "file.name" => "my_file.txt" }
- end
-
- let(:tmp_file) { Tempfile.new('filename', target_path) }
-
- before do
- FileUtils.touch(tmp_file)
- end
-
- after do
- FileUtils.rm_f(tmp_file)
- end
-
- it 'succeeds' do
- expect { subject }.not_to raise_error
-
- expect(uploader).to be_exists
- end
-
- it 'proper path is being used' do
- subject
-
- expect(uploader.path).to start_with(uploader_class.root)
- expect(uploader.path).to end_with("my_file.txt")
- end
-
- it 'source file to not exist' do
- subject
-
- expect(File.exist?(tmp_file.path)).to be_falsey
- end
+ expect(uploader).to be_exists
+ expect(uploader.path).to start_with(uploader_class.root)
+ expect(uploader.filename).to eq('rails_sample.jpg')
end
end
end
context 'when remote file is used' do
+ let(:temp_file) { Tempfile.new("test") }
+
let!(:fog_connection) do
stub_uploads_object_storage(uploader_class)
end
+ before do
+ FileUtils.touch(temp_file)
+ end
+
+ after do
+ FileUtils.rm_f(temp_file)
+ end
+
context 'when valid file is used' do
- context 'when no filename is specified' do
- let(:params) do
- { "file.remote_id" => "test/123123" }
- end
-
- it 'raises an error' do
- expect { subject }.to raise_error(uploader_class::RemoteStoreError, /Missing filename/)
- end
- end
-
context 'when invalid file is specified' do
- let(:params) do
- { "file.remote_id" => "../test/123123",
- "file.name" => "my_file.txt" }
+ let(:uploaded_file) do
+ UploadedFile.new(temp_file.path, remote_id: "../test/123123")
end
it 'raises an error' do
@@ -596,9 +564,8 @@ describe ObjectStorage do
end
context 'when non existing file is specified' do
- let(:params) do
- { "file.remote_id" => "test/12312300",
- "file.name" => "my_file.txt" }
+ let(:uploaded_file) do
+ UploadedFile.new(temp_file.path, remote_id: "test/123123")
end
it 'raises an error' do
@@ -606,10 +573,9 @@ describe ObjectStorage do
end
end
- context 'when filename is specified' do
- let(:params) do
- { "file.remote_id" => "test/123123",
- "file.name" => "my_file.txt" }
+ context 'when valid file is specified' do
+ let(:uploaded_file) do
+ UploadedFile.new(temp_file.path, filename: "my_file.txt", remote_id: "test/123123")
end
let!(:fog_file) do
@@ -619,36 +585,37 @@ describe ObjectStorage do
)
end
- it 'succeeds' do
+ it 'file to be cached and remote stored' do
expect { subject }.not_to raise_error
expect(uploader).to be_exists
- end
-
- it 'path to not be temporary' do
- subject
-
+ expect(uploader).to be_cached
expect(uploader.path).not_to be_nil
- expect(uploader.path).not_to include('tmp/upload')
- expect(uploader.url).to include('/my_file.txt')
+ expect(uploader.path).not_to include('tmp/cache')
+ expect(uploader.url).not_to be_nil
+ expect(uploader.path).not_to include('tmp/cache')
+ expect(uploader.object_store).to eq(described_class::Store::REMOTE)
end
- it 'url is used' do
- subject
+ context 'when file is stored' do
+ subject do
+ uploader.store!(uploaded_file)
+ end
- expect(uploader.url).not_to be_nil
- expect(uploader.url).to include('/my_file.txt')
+ it 'file to be remotely stored in permament location' do
+ subject
+
+ expect(uploader).to be_exists
+ expect(uploader).not_to be_cached
+ expect(uploader.path).not_to be_nil
+ expect(uploader.path).not_to include('tmp/upload')
+ expect(uploader.path).not_to include('tmp/cache')
+ expect(uploader.url).to include('/my_file.txt')
+ expect(uploader.object_store).to eq(described_class::Store::REMOTE)
+ end
end
end
end
end
-
- context 'when no file is used' do
- let(:params) { {} }
-
- it 'raises an error' do
- expect { subject }.to raise_error(uploader_class::RemoteStoreError, /Bad file/)
- end
- end
end
end
diff --git a/spec/views/admin/dashboard/index.html.haml_spec.rb b/spec/views/admin/dashboard/index.html.haml_spec.rb
index b4359d819a0..099baacf019 100644
--- a/spec/views/admin/dashboard/index.html.haml_spec.rb
+++ b/spec/views/admin/dashboard/index.html.haml_spec.rb
@@ -18,4 +18,10 @@ describe 'admin/dashboard/index.html.haml' do
expect(rendered).to have_content 'GitLab Workhorse'
expect(rendered).to have_content Gitlab::Workhorse.version
end
+
+ it "includes revision of GitLab" do
+ render
+
+ expect(rendered).to have_content "#{Gitlab::VERSION} (#{Gitlab::REVISION})"
+ end
end
diff --git a/spec/views/projects/buttons/_dropdown.html.haml_spec.rb b/spec/views/projects/buttons/_dropdown.html.haml_spec.rb
index d0e692635b9..8b9aab30286 100644
--- a/spec/views/projects/buttons/_dropdown.html.haml_spec.rb
+++ b/spec/views/projects/buttons/_dropdown.html.haml_spec.rb
@@ -8,7 +8,8 @@ describe 'projects/buttons/_dropdown' do
assign(:project, project)
allow(view).to receive(:current_user).and_return(user)
- allow(view).to receive(:can?).and_return(true)
+ allow(view).to receive(:can?).with(user, :push_code, project).and_return(true)
+ allow(view).to receive(:can_collaborate_with_project?).and_return(true)
end
context 'empty repository' do
diff --git a/spec/views/projects/commit/_commit_box.html.haml_spec.rb b/spec/views/projects/commit/_commit_box.html.haml_spec.rb
index 448b925cf34..2fdd28a3be4 100644
--- a/spec/views/projects/commit/_commit_box.html.haml_spec.rb
+++ b/spec/views/projects/commit/_commit_box.html.haml_spec.rb
@@ -7,6 +7,7 @@ describe 'projects/commit/_commit_box.html.haml' do
before do
assign(:project, project)
assign(:commit, project.commit)
+ allow(view).to receive(:current_user).and_return(user)
allow(view).to receive(:can_collaborate_with_project?).and_return(false)
end
@@ -47,7 +48,8 @@ describe 'projects/commit/_commit_box.html.haml' do
context 'viewing a commit' do
context 'as a developer' do
before do
- expect(view).to receive(:can_collaborate_with_project?).and_return(true)
+ project.add_developer(user)
+ allow(view).to receive(:can_collaborate_with_project?).and_return(true)
end
it 'has a link to create a new tag' do
@@ -58,10 +60,6 @@ describe 'projects/commit/_commit_box.html.haml' do
end
context 'as a non-developer' do
- before do
- expect(view).to receive(:can_collaborate_with_project?).and_return(false)
- end
-
it 'does not have a link to create a new tag' do
render
diff --git a/spec/views/projects/jobs/show.html.haml_spec.rb b/spec/views/projects/jobs/show.html.haml_spec.rb
index 6a67da79ec5..c93152b88e3 100644
--- a/spec/views/projects/jobs/show.html.haml_spec.rb
+++ b/spec/views/projects/jobs/show.html.haml_spec.rb
@@ -1,8 +1,10 @@
require 'spec_helper'
describe 'projects/jobs/show' do
+ let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:build) { create(:ci_build, pipeline: pipeline) }
+ let(:builds) { project.builds.present(current_user: user) }
let(:pipeline) do
create(:ci_pipeline, project: project, sha: project.commit.id)
@@ -11,6 +13,7 @@ describe 'projects/jobs/show' do
before do
assign(:build, build.present)
assign(:project, project)
+ assign(:builds, builds)
allow(view).to receive(:can?).and_return(true)
end
@@ -18,7 +21,7 @@ describe 'projects/jobs/show' do
describe 'environment info in job view' do
context 'job with latest deployment' do
let(:build) do
- create(:ci_build, :success, environment: 'staging')
+ create(:ci_build, :success, :trace_artifact, environment: 'staging')
end
before do
@@ -37,11 +40,11 @@ describe 'projects/jobs/show' do
context 'job with outdated deployment' do
let(:build) do
- create(:ci_build, :success, environment: 'staging', pipeline: pipeline)
+ create(:ci_build, :success, :trace_artifact, environment: 'staging', pipeline: pipeline)
end
let(:second_build) do
- create(:ci_build, :success, environment: 'staging', pipeline: pipeline)
+ create(:ci_build, :success, :trace_artifact, environment: 'staging', pipeline: pipeline)
end
let(:environment) do
@@ -67,7 +70,7 @@ describe 'projects/jobs/show' do
context 'job failed to deploy' do
let(:build) do
- create(:ci_build, :failed, environment: 'staging', pipeline: pipeline)
+ create(:ci_build, :failed, :trace_artifact, environment: 'staging', pipeline: pipeline)
end
let!(:environment) do
@@ -85,7 +88,7 @@ describe 'projects/jobs/show' do
context 'job will deploy' do
let(:build) do
- create(:ci_build, :running, environment: 'staging', pipeline: pipeline)
+ create(:ci_build, :running, :trace_live, environment: 'staging', pipeline: pipeline)
end
context 'when environment exists' do
@@ -133,7 +136,7 @@ describe 'projects/jobs/show' do
context 'job that failed to deploy and environment has not been created' do
let(:build) do
- create(:ci_build, :failed, environment: 'staging', pipeline: pipeline)
+ create(:ci_build, :failed, :trace_artifact, environment: 'staging', pipeline: pipeline)
end
let!(:environment) do
@@ -151,7 +154,7 @@ describe 'projects/jobs/show' do
context 'job that will deploy and environment has not been created' do
let(:build) do
- create(:ci_build, :running, environment: 'staging', pipeline: pipeline)
+ create(:ci_build, :running, :trace_live, environment: 'staging', pipeline: pipeline)
end
let!(:environment) do
@@ -171,8 +174,9 @@ describe 'projects/jobs/show' do
end
context 'when job is running' do
+ let(:build) { create(:ci_build, :trace_live, :running, pipeline: pipeline) }
+
before do
- build.run!
render
end
diff --git a/spec/views/projects/merge_requests/_commits.html.haml_spec.rb b/spec/views/projects/merge_requests/_commits.html.haml_spec.rb
index 3ca67114558..b1c6565c08a 100644
--- a/spec/views/projects/merge_requests/_commits.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/_commits.html.haml_spec.rb
@@ -28,6 +28,6 @@ describe 'projects/merge_requests/_commits.html.haml' do
commit = merge_request.commits.first # HEAD
href = diffs_project_merge_request_path(target_project, merge_request, commit_id: commit)
- expect(rendered).to have_link(Commit.truncate_sha(commit.sha), href: href)
+ expect(rendered).to have_link(href: href)
end
end
diff --git a/spec/views/projects/pipelines_settings/_show.html.haml_spec.rb b/spec/views/projects/settings/ci_cd/_form.html.haml_spec.rb
similarity index 97%
rename from spec/views/projects/pipelines_settings/_show.html.haml_spec.rb
rename to spec/views/projects/settings/ci_cd/_form.html.haml_spec.rb
index 7b300150874..be9a4d9c57c 100644
--- a/spec/views/projects/pipelines_settings/_show.html.haml_spec.rb
+++ b/spec/views/projects/settings/ci_cd/_form.html.haml_spec.rb
@@ -1,6 +1,6 @@
require 'spec_helper'
-describe 'projects/pipelines_settings/_show' do
+describe 'projects/settings/ci_cd/_form' do
let(:project) { create(:project, :repository) }
before do
diff --git a/spec/views/shared/milestones/_top.html.haml.rb b/spec/views/shared/milestones/_top.html.haml.rb
new file mode 100644
index 00000000000..516d81c87ac
--- /dev/null
+++ b/spec/views/shared/milestones/_top.html.haml.rb
@@ -0,0 +1,35 @@
+require 'spec_helper'
+
+describe 'shared/milestones/_top.html.haml' do
+ set(:group) { create(:group) }
+ let(:project) { create(:project, group: group) }
+ let(:milestone) { create(:milestone, project: project) }
+
+ before do
+ allow(milestone).to receive(:milestones) { [] }
+ end
+
+ it 'renders a deprecation message for a legacy milestone' do
+ allow(milestone).to receive(:legacy_group_milestone?) { true }
+
+ render 'shared/milestones/top', milestone: milestone
+
+ expect(rendered).to have_css('.milestone-deprecation-message')
+ end
+
+ it 'renders a deprecation message for a dashboard milestone' do
+ allow(milestone).to receive(:dashboard_milestone?) { true }
+
+ render 'shared/milestones/top', milestone: milestone
+
+ expect(rendered).to have_css('.milestone-deprecation-message')
+ end
+
+ it 'does not render a deprecation message for a non-legacy and non-dashboard milestone' do
+ assign :group, group
+
+ render 'shared/milestones/top', milestone: milestone
+
+ expect(rendered).not_to have_css('.milestone-deprecation-message')
+ end
+end
diff --git a/spec/workers/concerns/waitable_worker_spec.rb b/spec/workers/concerns/waitable_worker_spec.rb
index 4af0de86ac9..54ab07981a4 100644
--- a/spec/workers/concerns/waitable_worker_spec.rb
+++ b/spec/workers/concerns/waitable_worker_spec.rb
@@ -14,6 +14,12 @@ describe WaitableWorker do
include ApplicationWorker
prepend WaitableWorker
+ # This is a workaround for a Ruby 2.3.7 bug. rspec-mocks cannot restore
+ # the visibility of prepended modules. See
+ # https://github.com/rspec/rspec-mocks/issues/1231 for more details.
+ def self.bulk_perform_inline(args_list)
+ end
+
def perform(i = 0)
self.class.counter += i
end
diff --git a/spec/workers/repository_fork_worker_spec.rb b/spec/workers/repository_fork_worker_spec.rb
index 6c66658d8c3..4b3c1736ea0 100644
--- a/spec/workers/repository_fork_worker_spec.rb
+++ b/spec/workers/repository_fork_worker_spec.rb
@@ -9,70 +9,91 @@ describe RepositoryForkWorker do
describe "#perform" do
let(:project) { create(:project, :repository) }
- let(:fork_project) { create(:project, :repository, :import_scheduled, forked_from_project: project) }
let(:shell) { Gitlab::Shell.new }
+ let(:fork_project) { create(:project, :repository, :import_scheduled, forked_from_project: project) }
- before do
- allow(subject).to receive(:gitlab_shell).and_return(shell)
- end
+ shared_examples 'RepositoryForkWorker performing' do
+ before do
+ allow(subject).to receive(:gitlab_shell).and_return(shell)
+ end
- def perform!
- subject.perform(fork_project.id, '/test/path', project.disk_path)
- end
+ def expect_fork_repository
+ expect(shell).to receive(:fork_repository).with(
+ 'default',
+ project.disk_path,
+ fork_project.repository_storage,
+ fork_project.disk_path
+ )
+ end
- def expect_fork_repository
- expect(shell).to receive(:fork_repository).with(
- '/test/path',
- project.disk_path,
- fork_project.repository_storage_path,
- fork_project.disk_path
- )
- end
+ describe 'when a worker was reset without cleanup' do
+ let(:jid) { '12345678' }
- describe 'when a worker was reset without cleanup' do
- let(:jid) { '12345678' }
+ it 'creates a new repository from a fork' do
+ allow(subject).to receive(:jid).and_return(jid)
- it 'creates a new repository from a fork' do
- allow(subject).to receive(:jid).and_return(jid)
+ expect_fork_repository.and_return(true)
+ perform!
+ end
+ end
+
+ it "creates a new repository from a fork" do
expect_fork_repository.and_return(true)
perform!
end
+
+ it 'protects the default branch' do
+ expect_fork_repository.and_return(true)
+
+ perform!
+
+ expect(fork_project.protected_branches.first.name).to eq(fork_project.default_branch)
+ end
+
+ it 'flushes various caches' do
+ expect_fork_repository.and_return(true)
+
+ expect_any_instance_of(Repository).to receive(:expire_emptiness_caches)
+ .and_call_original
+
+ expect_any_instance_of(Repository).to receive(:expire_exists_cache)
+ .and_call_original
+
+ perform!
+ end
+
+ it "handles bad fork" do
+ error_message = "Unable to fork project #{fork_project.id} for repository #{project.disk_path} -> #{fork_project.disk_path}"
+
+ expect_fork_repository.and_return(false)
+
+ expect { perform! }.to raise_error(StandardError, error_message)
+ end
end
- it "creates a new repository from a fork" do
- expect_fork_repository.and_return(true)
+ context 'only project ID passed' do
+ def perform!
+ subject.perform(fork_project.id)
+ end
- perform!
+ it_behaves_like 'RepositoryForkWorker performing'
end
- it 'protects the default branch' do
- expect_fork_repository.and_return(true)
+ context 'project ID, storage and repo paths passed' do
+ def perform!
+ subject.perform(fork_project.id, TestEnv.repos_path, project.disk_path)
+ end
- perform!
+ it_behaves_like 'RepositoryForkWorker performing'
- expect(fork_project.protected_branches.first.name).to eq(fork_project.default_branch)
- end
+ it 'logs a message about forking with old-style arguments' do
+ allow(Rails.logger).to receive(:info).with(anything) # To compensate for other logs
+ expect(Rails.logger).to receive(:info).with("Project #{fork_project.id} is being forked using old-style arguments.")
- it 'flushes various caches' do
- expect_fork_repository.and_return(true)
-
- expect_any_instance_of(Repository).to receive(:expire_emptiness_caches)
- .and_call_original
-
- expect_any_instance_of(Repository).to receive(:expire_exists_cache)
- .and_call_original
-
- perform!
- end
-
- it "handles bad fork" do
- error_message = "Unable to fork project #{fork_project.id} for repository #{project.disk_path} -> #{fork_project.disk_path}"
-
- expect_fork_repository.and_return(false)
-
- expect { perform! }.to raise_error(StandardError, error_message)
+ perform!
+ end
end
end
end
diff --git a/vendor/gitignore/Android.gitignore b/vendor/gitignore/Android.gitignore
index d57137223ed..39b6783cef8 100644
--- a/vendor/gitignore/Android.gitignore
+++ b/vendor/gitignore/Android.gitignore
@@ -37,8 +37,10 @@ captures/
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
+.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
+.idea/caches
# Keystore files
# Uncomment the following line if you do not want to check your keystore files in.
diff --git a/vendor/gitignore/Elixir.gitignore b/vendor/gitignore/Elixir.gitignore
index b6d65867dac..86e4c3f3905 100644
--- a/vendor/gitignore/Elixir.gitignore
+++ b/vendor/gitignore/Elixir.gitignore
@@ -6,3 +6,4 @@
erl_crash.dump
*.ez
*.beam
+/config/*.secret.exs
diff --git a/vendor/gitignore/Global/JetBrains.gitignore b/vendor/gitignore/Global/JetBrains.gitignore
index 9c01e12b050..a83a428c844 100644
--- a/vendor/gitignore/Global/JetBrains.gitignore
+++ b/vendor/gitignore/Global/JetBrains.gitignore
@@ -1,12 +1,12 @@
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
-# User-specific stuff:
+# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/dictionaries
-# Sensitive or high-churn files:
+# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
@@ -14,7 +14,7 @@
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
-# Gradle:
+# Gradle
.idea/**/gradle.xml
.idea/**/libraries
@@ -22,14 +22,12 @@
cmake-build-debug/
cmake-build-release/
-# Mongo Explorer plugin:
+# Mongo Explorer plugin
.idea/**/mongoSettings.xml
-## File-based project format:
+# File-based project format
*.iws
-## Plugin-specific files:
-
# IntelliJ
out/
@@ -47,3 +45,6 @@ com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
diff --git a/vendor/gitignore/Global/Windows.gitignore b/vendor/gitignore/Global/Windows.gitignore
index 846a1db836c..0251dd21ad8 100644
--- a/vendor/gitignore/Global/Windows.gitignore
+++ b/vendor/gitignore/Global/Windows.gitignore
@@ -15,6 +15,7 @@ $RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
+*.msix
*.msm
*.msp
diff --git a/vendor/gitignore/Godot.gitignore b/vendor/gitignore/Godot.gitignore
new file mode 100644
index 00000000000..ba45ca4582e
--- /dev/null
+++ b/vendor/gitignore/Godot.gitignore
@@ -0,0 +1,8 @@
+
+# Godot-specific ignores
+.import/
+export.cfg
+export_presets.cfg
+
+# Mono-specific ignores
+.mono/
diff --git a/vendor/gitignore/Joomla.gitignore b/vendor/gitignore/Joomla.gitignore
index b6bf3a9c96a..378c158bddf 100644
--- a/vendor/gitignore/Joomla.gitignore
+++ b/vendor/gitignore/Joomla.gitignore
@@ -1,4 +1,3 @@
-/.gitignore
/.htaccess
/administrator/cache/*
/administrator/components/com_admin/*
diff --git a/vendor/gitignore/KiCad.gitignore b/vendor/gitignore/KiCad.gitignore
index 208bc4fc591..198392e551e 100644
--- a/vendor/gitignore/KiCad.gitignore
+++ b/vendor/gitignore/KiCad.gitignore
@@ -1,4 +1,5 @@
# For PCBs designed using KiCad: http://www.kicad-pcb.org/
+# Format documentation: http://kicad-pcb.org/help/file-formats/
# Temporary files
*.000
@@ -8,6 +9,10 @@
*~
_autosave-*
*.tmp
+*-cache.lib
+*-rescue.lib
+*-save.pro
+*-save.kicad_pcb
# Netlist files (exported from Eeschema)
*.net
diff --git a/vendor/gitignore/Leiningen.gitignore b/vendor/gitignore/Leiningen.gitignore
index a9fe6fba80d..a4cb69a32cc 100644
--- a/vendor/gitignore/Leiningen.gitignore
+++ b/vendor/gitignore/Leiningen.gitignore
@@ -11,3 +11,4 @@ pom.xml.asc
.lein-plugins/
.lein-failures
.nrepl-port
+.cpcache/
diff --git a/vendor/gitignore/Node.gitignore b/vendor/gitignore/Node.gitignore
index d1bed128fa8..ad46b30886f 100644
--- a/vendor/gitignore/Node.gitignore
+++ b/vendor/gitignore/Node.gitignore
@@ -36,7 +36,7 @@ build/Release
node_modules/
jspm_packages/
-# Typescript v1 declaration files
+# TypeScript v1 declaration files
typings/
# Optional npm cache directory
diff --git a/vendor/gitignore/Python.gitignore b/vendor/gitignore/Python.gitignore
index b989be6ca15..894a44cc066 100644
--- a/vendor/gitignore/Python.gitignore
+++ b/vendor/gitignore/Python.gitignore
@@ -53,9 +53,8 @@ coverage.xml
# Django stuff:
*.log
-.static_storage/
-.media/
local_settings.py
+db.sqlite3
# Flask stuff:
instance/
diff --git a/vendor/gitignore/Rails.gitignore b/vendor/gitignore/Rails.gitignore
index 828ab1d556a..e62f78e17bc 100644
--- a/vendor/gitignore/Rails.gitignore
+++ b/vendor/gitignore/Rails.gitignore
@@ -14,6 +14,7 @@ pickle-email-*.html
# TODO Comment out this rule if you are OK with secrets being uploaded to the repo
config/initializers/secret_token.rb
+config/master.key
# Only include if you have production secrets in this file, which is no longer a Rails default
# config/secrets.yml
diff --git a/vendor/gitignore/Rust.gitignore b/vendor/gitignore/Rust.gitignore
index 50281a44270..088ba6ba7d3 100644
--- a/vendor/gitignore/Rust.gitignore
+++ b/vendor/gitignore/Rust.gitignore
@@ -3,7 +3,7 @@
/target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
-# More information here http://doc.crates.io/guide.html#cargotoml-vs-cargolock
+# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
# These are backup files generated by rustfmt
diff --git a/vendor/gitignore/TeX.gitignore b/vendor/gitignore/TeX.gitignore
index 78c1c5cd26e..c560658e45c 100644
--- a/vendor/gitignore/TeX.gitignore
+++ b/vendor/gitignore/TeX.gitignore
@@ -153,7 +153,9 @@ _minted*
*.mw
# nomencl
+*.nlg
*.nlo
+*.nls
# pax
*.pax
diff --git a/vendor/gitignore/Unity.gitignore b/vendor/gitignore/Unity.gitignore
index 75e5b1405da..a7c0c70a0b4 100644
--- a/vendor/gitignore/Unity.gitignore
+++ b/vendor/gitignore/Unity.gitignore
@@ -5,7 +5,7 @@
[Bb]uilds/
Assets/AssetStoreTools*
-# Visual Studio 2015 cache directory
+# Visual Studio cache directory
/.vs/
# Autogenerated VS/MD/Consulo solution and project files
diff --git a/vendor/gitignore/VisualStudio.gitignore b/vendor/gitignore/VisualStudio.gitignore
index 8e930f59c47..29063cf6072 100644
--- a/vendor/gitignore/VisualStudio.gitignore
+++ b/vendor/gitignore/VisualStudio.gitignore
@@ -64,8 +64,10 @@ StyleCopReport.xml
*.ilk
*.meta
*.obj
+*.iobj
*.pch
*.pdb
+*.ipdb
*.pgc
*.pgd
*.rsp
@@ -248,6 +250,7 @@ ServiceFabricBackup/
*.rdl.data
*.bim.layout
*.bim_*.settings
+*.rptproj.rsuser
# Microsoft Fakes
FakesAssemblies/
@@ -319,3 +322,8 @@ ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
diff --git a/vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml b/vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml
index 4223dc18933..4f4ed80d101 100644
--- a/vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml
+++ b/vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml
@@ -50,9 +50,9 @@ stages:
build:
stage: build
- image: docker:git
+ image: docker:stable-git
services:
- - docker:dind
+ - docker:stable-dind
variables:
DOCKER_DRIVER: overlay2
script:
@@ -76,12 +76,12 @@ test:
- branches
codequality:
- image: docker:latest
+ image: docker:stable
variables:
DOCKER_DRIVER: overlay2
allow_failure: true
services:
- - docker:dind
+ - docker:stable-dind
script:
- setup_docker
- codeclimate
@@ -90,12 +90,12 @@ codequality:
performance:
stage: performance
- image: docker:latest
+ image: docker:stable
variables:
DOCKER_DRIVER: overlay2
allow_failure: true
services:
- - docker:dind
+ - docker:stable-dind
script:
- setup_docker
- performance
@@ -109,25 +109,37 @@ performance:
kubernetes: active
sast:
- image: docker:latest
+ image: docker:stable
variables:
DOCKER_DRIVER: overlay2
allow_failure: true
services:
- - docker:dind
+ - docker:stable-dind
script:
- setup_docker
- sast
artifacts:
paths: [gl-sast-report.json]
-sast:container:
- image: docker:latest
+dependency_scanning:
+ image: docker:stable
variables:
DOCKER_DRIVER: overlay2
allow_failure: true
services:
- - docker:dind
+ - docker:stable-dind
+ script:
+ - setup_docker
+ - dependency_scanning
+ artifacts:
+ paths: [gl-dependency-scanning-report.json]
+sast:container:
+ image: docker:stable
+ variables:
+ DOCKER_DRIVER: overlay2
+ allow_failure: true
+ services:
+ - docker:stable-dind
script:
- setup_docker
- sast_container
@@ -303,6 +315,7 @@ production:
mv clair-scanner_linux_amd64 clair-scanner
chmod +x clair-scanner
touch clair-whitelist.yml
+ while( ! wget -q -O /dev/null http://docker:6060/v1/namespaces ) ; do sleep 1 ; done
./clair-scanner -c http://docker:6060 --ip $(hostname -i) -r gl-sast-container-report.json -l clair.log -w clair-whitelist.yml ${CI_APPLICATION_REPOSITORY}:${CI_APPLICATION_TAG} || true
}
@@ -324,7 +337,6 @@ production:
fi
docker run --env SAST_CONFIDENCE_LEVEL="${SAST_CONFIDENCE_LEVEL:-3}" \
- --env SAST_DISABLE_REMOTE_CHECKS="${SAST_DISABLE_REMOTE_CHECKS:-false}" \
--volume "$PWD:/code" \
--volume /var/run/docker.sock:/var/run/docker.sock \
"registry.gitlab.com/gitlab-org/security-products/sast:$SP_VERSION" /app/bin/run /code
@@ -335,6 +347,20 @@ production:
esac
}
+ function dependency_scanning() {
+ case "$CI_SERVER_VERSION" in
+ *-ee)
+ docker run --env DEP_SCAN_DISABLE_REMOTE_CHECKS="${DEP_SCAN_DISABLE_REMOTE_CHECKS:-false}" \
+ --volume "$PWD:/code" \
+ --volume /var/run/docker.sock:/var/run/docker.sock \
+ "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$SP_VERSION" /code
+ ;;
+ *)
+ echo "GitLab EE is required"
+ ;;
+ esac
+ }
+
function deploy() {
track="${1-stable}"
name="$CI_ENVIRONMENT_SLUG"
@@ -355,10 +381,16 @@ production:
if [[ "$track" == "stable" ]]; then
# for stable track get number of replicas from `PRODUCTION_REPLICAS`
eval new_replicas=\$${env_slug}_REPLICAS
+ if [[ -z "$new_replicas" ]]; then
+ new_replicas=$REPLICAS
+ fi
service_enabled="true"
else
# for all tracks get number of replicas from `CANARY_PRODUCTION_REPLICAS`
eval new_replicas=\$${env_track}_${env_slug}_REPLICAS
+ if [[ -z "$new_replicas" ]]; then
+ eval new_replicas=\${env_track}_REPLICAS
+ fi
fi
if [[ -n "$new_replicas" ]]; then
replicas="$new_replicas"
diff --git a/vendor/gitlab-ci-yml/Chef.gitlab-ci.yml b/vendor/gitlab-ci-yml/Chef.gitlab-ci.yml
index 4d5b6484d6e..ff7c87c29f0 100644
--- a/vendor/gitlab-ci-yml/Chef.gitlab-ci.yml
+++ b/vendor/gitlab-ci-yml/Chef.gitlab-ci.yml
@@ -7,7 +7,7 @@
image: "chef/chefdk"
services:
- - docker:dind
+ - docker:stable-dind
variables:
DOCKER_HOST: "tcp://docker:2375"
diff --git a/vendor/gitlab-ci-yml/Docker.gitlab-ci.yml b/vendor/gitlab-ci-yml/Docker.gitlab-ci.yml
index eeefadaa019..58d48d1284b 100644
--- a/vendor/gitlab-ci-yml/Docker.gitlab-ci.yml
+++ b/vendor/gitlab-ci-yml/Docker.gitlab-ci.yml
@@ -2,7 +2,7 @@
image: docker:latest
services:
- - docker:dind
+ - docker:stable-dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
diff --git a/vendor/gitlab-ci-yml/Laravel.gitlab-ci.yml b/vendor/gitlab-ci-yml/Laravel.gitlab-ci.yml
index 0ad662cf704..0688f77a1d2 100644
--- a/vendor/gitlab-ci-yml/Laravel.gitlab-ci.yml
+++ b/vendor/gitlab-ci-yml/Laravel.gitlab-ci.yml
@@ -32,7 +32,7 @@ before_script:
- apt-get install git nodejs libcurl4-gnutls-dev libicu-dev libmcrypt-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libpq-dev libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev -yqq
# Install php extensions
- - docker-php-ext-install mbstring mcrypt pdo_mysql curl json intl gd xml zip bz2 opcache
+ - docker-php-ext-install mbstring pdo_mysql curl json intl gd xml zip bz2 opcache
# Install & enable Xdebug for code coverage reports
- pecl install xdebug
diff --git a/vendor/gitlab-ci-yml/Pages/Gatsby.gitlab-ci.yml b/vendor/gitlab-ci-yml/Pages/Gatsby.gitlab-ci.yml
new file mode 100644
index 00000000000..9df2a4797b2
--- /dev/null
+++ b/vendor/gitlab-ci-yml/Pages/Gatsby.gitlab-ci.yml
@@ -0,0 +1,17 @@
+image: node:latest
+
+# This folder is cached between builds
+# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
+cache:
+ paths:
+ - node_modules/
+
+pages:
+ script:
+ - yarn install
+ - ./node_modules/.bin/gatsby build --prefix-paths
+ artifacts:
+ paths:
+ - public
+ only:
+ - master
diff --git a/vendor/gitlab-ci-yml/Pages/Hugo.gitlab-ci.yml b/vendor/gitlab-ci-yml/Pages/Hugo.gitlab-ci.yml
index a72b8281401..b8cfb0f56f6 100644
--- a/vendor/gitlab-ci-yml/Pages/Hugo.gitlab-ci.yml
+++ b/vendor/gitlab-ci-yml/Pages/Hugo.gitlab-ci.yml
@@ -1,5 +1,5 @@
# Full project: https://gitlab.com/pages/hugo
-image: publysher/hugo
+image: dettmering/hugo-build
pages:
script:
diff --git a/vendor/gitlab-ci-yml/Python.gitlab-ci.yml b/vendor/gitlab-ci-yml/Python.gitlab-ci.yml
index a2882a5407d..2e0589de652 100644
--- a/vendor/gitlab-ci-yml/Python.gitlab-ci.yml
+++ b/vendor/gitlab-ci-yml/Python.gitlab-ci.yml
@@ -1,8 +1,27 @@
-# This file is a template, and might need editing before it works on your project.
+# Official language image. Look for the different tagged releases at:
+# https://hub.docker.com/r/library/python/tags/
image: python:latest
+# Change pip's cache directory to be inside the project directory since we can
+# only cache local items.
+variables:
+ PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache"
+
+# Pip's cache doesn't store the python packages
+# https://pip.pypa.io/en/stable/reference/pip_install/#caching
+#
+# If you want to also cache the installed packages, you have to install
+# them in a virtualenv and cache it as well.
+cache:
+ paths:
+ - .cache/pip
+ - venv/
+
before_script:
- - python -V # Print out python version for debugging
+ - python -V # Print out python version for debugging
+ - pip install virtualenv
+ - virtualenv venv
+ - source venv/bin/activate
test:
script:
diff --git a/vendor/licenses.csv b/vendor/licenses.csv
index 03115292f02..ca88f867fe5 100644
--- a/vendor/licenses.csv
+++ b/vendor/licenses.csv
@@ -4,7 +4,7 @@
@babel/template,7.0.0-beta.32,MIT
@babel/traverse,7.0.0-beta.32,MIT
@babel/types,7.0.0-beta.32,MIT
-@gitlab-org/gitlab-svgs,1.8.0,SEE LICENSE IN LICENSE
+@gitlab-org/gitlab-svgs,1.17.0,SEE LICENSE IN LICENSE
@types/jquery,2.0.48,MIT
JSONStream,1.3.2,MIT
RedCloth,4.3.2,MIT
@@ -27,10 +27,11 @@ activejob,4.2.10,MIT
activemodel,4.2.10,MIT
activerecord,4.2.10,MIT
activesupport,4.2.10,MIT
-acts-as-taggable-on,4.0.0,MIT
+acts-as-taggable-on,5.0.0,MIT
address,1.0.3,MIT
addressable,2.5.2,Apache 2.0
addressparser,1.0.1,MIT
+aes_key_wrap,1.0.1,MIT
after,0.8.2,MIT
agent-base,2.1.1,MIT
ajv,4.11.8,MIT
@@ -80,8 +81,8 @@ array-unique,0.3.2,MIT
arraybuffer.slice,0.0.7,MIT
arrify,1.0.1,MIT
asana,0.6.0,MIT
-asciidoctor,1.5.3,MIT
-asciidoctor-plantuml,0.0.7,MIT
+asciidoctor,1.5.6.2,MIT
+asciidoctor-plantuml,0.0.8,MIT
asn1,0.2.3,MIT
asn1.js,4.10.1,MIT
assert,1.4.1,MIT
@@ -205,8 +206,8 @@ better-assert,1.0.2,MIT
bfj-node4,5.2.1,MIT
big.js,3.1.3,MIT
binary-extensions,1.11.0,MIT
-bindata,2.4.1,ruby
-bitsyntax,0.0.4,Unknown
+bindata,2.4.3,ruby
+bitsyntax,0.0.4,UNKNOWN
bl,1.1.2,MIT
blackst0ne-mermaid,7.1.0-fixed,MIT
blob,0.0.4,MIT*
@@ -274,7 +275,7 @@ chalk,1.1.3,MIT
chalk,2.3.0,MIT
chalk,2.3.1,MIT
chardet,0.4.2,MIT
-charlock_holmes,0.7.5,MIT
+charlock_holmes,0.7.6,MIT
chart.js,1.0.2,MIT
check-types,7.3.0,MIT
chokidar,1.7.0,MIT
@@ -314,7 +315,7 @@ combine-lists,1.0.1,MIT
combine-source-map,0.7.2,MIT
combine-source-map,0.8.0,MIT
combined-stream,1.0.6,MIT
-commander,2.14.1,MIT
+commander,2.15.1,MIT
commondir,1.0.1,MIT
commonmarker,0.17.8,MIT
component-bind,1.0.0,MIT*
@@ -352,6 +353,7 @@ core-js,2.5.3,MIT
core-util-is,1.0.2,MIT
cosmiconfig,2.1.1,MIT
crack,0.4.3,MIT
+crass,1.0.3,MIT
create-ecdh,4.0.0,MIT
create-error-class,3.0.2,MIT
create-hash,1.1.3,MIT
@@ -457,13 +459,13 @@ document-register-element,1.3.0,MIT
dom-serialize,2.2.1,MIT
dom-serializer,0.1.0,MIT
domain-browser,1.1.7,MIT
-domain_name,0.5.20161021,"Simplified BSD,New BSD,Mozilla Public License 2.0"
+domain_name,0.5.20170404,"Simplified BSD,New BSD,Mozilla Public License 2.0"
domelementtype,1.1.3,Simplified BSD
domelementtype,1.3.0,Simplified BSD
domhandler,2.4.1,Simplified BSD
domutils,1.6.2,Simplified BSD
-doorkeeper,4.2.6,MIT
-doorkeeper-openid_connect,1.2.0,MIT
+doorkeeper,4.3.1,MIT
+doorkeeper-openid_connect,1.3.0,MIT
dot-prop,4.2.0,MIT
double-ended-queue,2.1.0-0,MIT
dropzone,4.2.0,MIT
@@ -543,7 +545,7 @@ eventemitter3,1.2.0,MIT
events,1.1.1,MIT
eventsource,0.1.6,MIT
evp_bytestokey,1.0.3,MIT
-excon,0.57.1,MIT
+excon,0.60.0,MIT
execa,0.7.0,MIT
execjs,2.6.0,MIT
exit-hook,1.1.1,MIT
@@ -571,7 +573,7 @@ fast-deep-equal,1.0.0,MIT
fast-json-stable-stringify,2.0.0,MIT
fast-levenshtein,2.0.6,MIT
fast_blank,1.0.0,MIT
-fast_gettext,1.4.0,"MIT,ruby"
+fast_gettext,1.6.0,"MIT,ruby"
fastparse,1.1.1,MIT
faye-websocket,0.10.0,MIT
faye-websocket,0.11.1,MIT
@@ -594,15 +596,15 @@ find-up,1.1.2,MIT
find-up,2.1.0,MIT
flat-cache,1.2.2,MIT
flatten,1.0.2,MIT
-flipper,0.11.0,MIT
-flipper-active_record,0.11.0,MIT
-flipper-active_support_cache_store,0.11.0,MIT
+flipper,0.13.0,MIT
+flipper-active_record,0.13.0,MIT
+flipper-active_support_cache_store,0.13.0,MIT
flowdock,0.7.1,MIT
flush-write-stream,1.0.2,MIT
fog-aliyun,0.2.0,MIT
-fog-aws,1.4.0,MIT
-fog-core,1.44.3,MIT
-fog-google,0.5.3,MIT
+fog-aws,2.0.1,MIT
+fog-core,1.45.0,MIT
+fog-google,1.3.3,MIT
fog-json,1.0.2,MIT
fog-local,0.3.1,MIT
fog-openstack,0.1.21,MIT
@@ -646,8 +648,8 @@ get-value,2.0.6,MIT
get_process_mem,0.2.0,MIT
getpass,0.1.7,MIT
gettext_i18n_rails,1.8.0,MIT
-gettext_i18n_rails_js,1.2.0,MIT
-gitaly-proto,0.88.0,MIT
+gettext_i18n_rails_js,1.3.0,MIT
+gitaly-proto,0.94.0,MIT
github-linguist,5.3.3,MIT
github-markup,1.6.1,MIT
gitlab-flowdock-git-hook,1.0.1,MIT
@@ -669,12 +671,13 @@ globals,9.18.0,MIT
globby,5.0.0,MIT
globby,6.1.0,MIT
globby,7.1.1,MIT
+goldiloader,2.0.1,MIT
gollum-grit_adapter,1.0.1,MIT
gollum-lib,4.2.7,MIT
gollum-rugged_adapter,0.4.4,MIT
gon,6.1.0,MIT
good-listener,1.2.2,MIT
-google-api-client,0.13.6,Apache 2.0
+google-api-client,0.19.8,Apache 2.0
google-protobuf,3.5.1,New BSD
googleapis-common-protos-types,1.0.1,Apache 2.0
googleauth,0.6.2,Apache 2.0
@@ -682,7 +685,7 @@ got,6.7.1,MIT
got,7.1.0,MIT
gpgme,2.0.13,LGPL-2.1+
graceful-fs,4.1.11,ISC
-grape,1.0.0,MIT
+grape,1.0.2,MIT
grape-entity,0.6.0,MIT
grape-route-helpers,2.1.0,MIT
grape_logging,1.7.0,MIT
@@ -716,7 +719,7 @@ hash-base,2.0.2,MIT
hash-base,3.0.4,MIT
hash-sum,1.0.2,MIT
hash.js,1.1.3,MIT
-hashie,3.5.6,MIT
+hashie,3.5.7,MIT
hashie-forbidden_attributes,0.1.1,MIT
hawk,3.1.3,New BSD
hawk,6.0.2,New BSD
@@ -733,16 +736,16 @@ hosted-git-info,2.2.0,ISC
hpack.js,2.1.6,MIT
html-comment-regex,1.1.1,MIT
html-entities,1.2.0,MIT
-html-pipeline,1.11.0,MIT
+html-pipeline,2.7.1,MIT
html2text,0.2.0,MIT
htmlentities,4.3.4,MIT
htmlescape,1.1.1,MIT
htmlparser2,3.9.2,MIT
-http,0.9.8,MIT
+http,2.2.2,MIT
http-cookie,1.0.3,MIT
http-deceiver,1.2.7,MIT
http-errors,1.6.2,MIT
-http-form_data,1.0.1,MIT
+http-form_data,1.0.3,MIT
http-proxy,1.16.2,MIT
http-proxy-agent,1.0.0,MIT
http-proxy-middleware,0.17.4,MIT
@@ -750,13 +753,13 @@ http-signature,1.1.1,MIT
http-signature,1.2.0,MIT
http_parser.rb,0.6.0,MIT
httparty,0.13.7,MIT
-httpclient,2.8.2,ruby
+httpclient,2.8.3,ruby
httpntlm,1.6.1,MIT
httpreq,0.4.24,MIT
https-browserify,0.0.1,MIT
https-browserify,1.0.0,MIT
https-proxy-agent,1.0.0,MIT
-i18n,0.9.1,MIT
+i18n,0.9.5,MIT
ice_nine,0.11.2,MIT
iconv-lite,0.4.15,MIT
iconv-lite,0.4.19,MIT
@@ -881,7 +884,6 @@ jed,1.1.1,MIT
jira-ruby,1.4.1,MIT
jquery,3.3.1,MIT
jquery-atwho-rails,1.3.2,MIT
-jquery-rails,4.3.1,MIT
jquery-ujs,1.2.2,MIT
jquery.waitforimages,2.2.0,MIT
js-base64,2.1.9,New BSD
@@ -893,7 +895,7 @@ jsbn,0.1.1,MIT
jsesc,0.5.0,MIT
jsesc,1.3.0,MIT
json,1.8.6,ruby
-json-jwt,1.7.2,MIT
+json-jwt,1.9.2,MIT
json-loader,0.5.7,MIT
json-schema,0.2.3,BSD
json-schema-traverse,0.3.1,MIT
@@ -927,7 +929,7 @@ kind-of,3.2.2,MIT
kind-of,4.0.0,MIT
kind-of,5.1.0,MIT
kind-of,6.0.2,MIT
-kubeclient,2.2.0,MIT
+kubeclient,3.0.0,MIT
labeled-stream-splicer,2.0.0,MIT
latest-version,3.1.0,MIT
lazy-cache,1.0.4,MIT
@@ -938,7 +940,7 @@ lexical-scope,1.2.0,MIT
libbase64,0.1.0,MIT
libmime,3.0.0,MIT
libqp,1.1.0,MIT
-licensee,8.7.0,MIT
+licensee,8.9.2,MIT
lie,3.1.1,MIT
little-plugger,1.1.4,MIT
load-json-file,1.1.0,MIT
@@ -980,7 +982,7 @@ loggly,1.1.1,MIT
loglevel,1.4.1,MIT
lograge,0.5.1,MIT
longest,1.0.1,MIT
-loofah,2.0.3,MIT
+loofah,2.2.2,MIT
loose-envify,1.3.1,MIT
loud-rejection,1.6.0,MIT
lowercase-keys,1.0.0,MIT
@@ -994,7 +996,7 @@ mailgun-js,0.7.15,MIT
make-dir,1.0.0,MIT
map-cache,0.2.2,MIT
map-obj,1.0.1,MIT
-map-stream,0.1.0,Unknown
+map-stream,0.1.0,UNKNOWN
map-visit,1.0.0,MIT
marked,0.3.12,MIT
match-at,0.1.1,MIT
@@ -1022,7 +1024,7 @@ mime-types-data,3.2016.0521,MIT
mimemagic,0.3.0,MIT
mimic-fn,1.1.0,MIT
mimic-response,1.0.0,MIT
-mini_mime,0.1.4,MIT
+mini_mime,1.0.0,MIT
mini_portile2,2.3.0,MIT
minimalistic-assert,1.0.0,ISC
minimalistic-crypto-utils,1.0.1,MIT
@@ -1047,7 +1049,7 @@ multi_xml,0.6.0,MIT
multicast-dns,6.1.1,MIT
multicast-dns-service-types,1.1.0,MIT
multipart-post,2.0.0,MIT
-mustermann,1.0.0,MIT
+mustermann,1.0.2,MIT
mustermann-grape,1.0.0,MIT
mute-stream,0.0.5,ISC
mute-stream,0.0.7,ISC
@@ -1058,7 +1060,7 @@ nanomatch,1.2.9,MIT
natural-compare,1.4.0,MIT
negotiator,0.6.1,MIT
net-ldap,0.16.0,MIT
-net-ssh,4.1.0,MIT
+net-ssh,4.2.0,MIT
netmask,1.0.6,MIT
netrc,0.11.0,MIT
node-forge,0.6.33,New BSD
@@ -1088,7 +1090,7 @@ null-check,1.0.0,MIT
num2fraction,1.2.2,MIT
number-is-nan,1.0.1,MIT
numerizer,0.1.1,MIT
-oauth,0.5.1,MIT
+oauth,0.5.4,MIT
oauth-sign,0.8.2,Apache 2.0
oauth2,1.4.0,MIT
object-assign,4.1.1,MIT
@@ -1099,25 +1101,25 @@ object-visit,1.0.1,MIT
object.omit,2.0.1,MIT
object.pick,1.3.0,MIT
obuf,1.1.1,MIT
-octokit,4.6.2,MIT
-oj,2.17.5,MIT
-omniauth,1.4.2,MIT
-omniauth-auth0,1.4.1,MIT
+octokit,4.8.0,MIT
+omniauth,1.8.1,MIT
+omniauth-auth0,2.0.0,MIT
omniauth-authentiq,0.3.1,MIT
omniauth-azure-oauth2,0.0.9,MIT
omniauth-cas3,1.1.4,MIT
omniauth-facebook,4.0.0,MIT
omniauth-github,1.1.2,MIT
omniauth-gitlab,1.0.2,MIT
-omniauth-google-oauth2,0.5.2,MIT
+omniauth-google-oauth2,0.5.3,MIT
+omniauth-jwt,0.0.2,MIT
omniauth-kerberos,0.3.0,MIT
omniauth-multipassword,0.4.2,MIT
omniauth-oauth,1.1.0,MIT
-omniauth-oauth2,1.4.0,MIT
+omniauth-oauth2,1.5.0,MIT
omniauth-oauth2-generic,0.2.2,MIT
-omniauth-saml,1.7.0,MIT
+omniauth-saml,1.10.0,MIT
omniauth-shibboleth,1.2.1,MIT
-omniauth-twitter,1.2.1,MIT
+omniauth-twitter,1.4.0,MIT
omniauth_crowd,2.2.3,MIT
on-finished,2.3.0,MIT
on-headers,1.0.1,MIT
@@ -1181,7 +1183,6 @@ pause-stream,0.0.11,Apache 2.0
pbkdf2,3.0.14,MIT
peek,1.0.1,MIT
peek-gc,0.0.2,MIT
-peek-host,1.0.0,MIT
peek-mysql2,1.1.0,MIT
peek-performance_bar,1.3.1,MIT
peek-pg,1.3.0,MIT
@@ -1248,8 +1249,8 @@ premailer,1.10.4,New BSD
premailer-rails,1.9.7,MIT
prepend-http,1.0.4,MIT
preserve,0.2.0,MIT
+prettier,1.11.1,MIT
prettier,1.8.2,MIT
-prettier,1.9.2,MIT
prismjs,1.6.0,MIT
private,0.1.8,MIT
process,0.11.10,MIT
@@ -1283,18 +1284,18 @@ querystring,0.2.0,MIT
querystring-es3,0.2.1,MIT
querystringify,0.0.4,MIT
querystringify,1.0.0,MIT
-rack,1.6.8,MIT
+rack,1.6.9,MIT
rack-accept,0.4.5,MIT
rack-attack,4.4.1,MIT
rack-cors,1.0.2,MIT
rack-oauth2,1.2.3,MIT
-rack-protection,1.5.3,MIT
+rack-protection,2.0.1,MIT
rack-proxy,0.6.0,MIT
rack-test,0.6.3,MIT
rails,4.2.10,MIT
rails-deprecated_sanitizer,1.0.3,MIT
-rails-dom-testing,1.0.8,MIT
-rails-html-sanitizer,1.0.3,MIT
+rails-dom-testing,1.0.9,MIT
+rails-html-sanitizer,1.0.4,MIT
rails-i18n,4.0.9,MIT
railties,4.2.10,MIT
rainbow,2.2.2,MIT
@@ -1331,7 +1332,7 @@ readdirp,2.1.0,MIT
readline2,1.0.1,MIT
recaptcha,3.0.0,MIT
rechoir,0.6.2,MIT
-recursive-open-struct,1.0.0,MIT
+recursive-open-struct,1.0.5,MIT
recursive-readdir,2.2.1,MIT
redcarpet,3.4.0,MIT
redent,1.0.0,MIT
@@ -1383,7 +1384,7 @@ resolve-from,1.0.1,MIT
resolve-from,3.0.0,MIT
resolve-url,0.2.1,MIT
responders,2.3.0,MIT
-rest-client,2.0.0,MIT
+rest-client,2.0.2,MIT
restore-cursor,1.0.1,MIT
restore-cursor,2.0.0,MIT
ret,0.1.15,MIT
@@ -1399,13 +1400,13 @@ rqrcode,0.7.0,MIT
rqrcode-rails3,0.1.7,MIT
ruby-enum,0.7.2,MIT
ruby-fogbugz,0.2.1,MIT
-ruby-prof,0.16.2,Simplified BSD
-ruby-saml,1.4.1,MIT
+ruby-prof,0.17.0,Simplified BSD
+ruby-saml,1.7.2,MIT
ruby_parser,3.9.0,MIT
rubyntlm,0.6.2,MIT
rubypants,0.2.0,BSD
rufus-scheduler,3.4.0,MIT
-rugged,0.26.0,MIT
+rugged,0.27.0,MIT
run-async,0.1.0,MIT
run-async,2.3.0,MIT
run-queue,1.0.3,ISC
@@ -1436,7 +1437,7 @@ semver,5.3.0,ISC
semver,5.5.0,ISC
semver-diff,2.1.0,MIT
send,0.16.1,MIT
-sentry-raven,2.5.3,Apache 2.0
+sentry-raven,2.7.2,Apache 2.0
serialize-javascript,1.4.0,New BSD
serve-index,1.9.0,MIT
serve-static,1.13.1,MIT
@@ -1507,9 +1508,9 @@ srcset,1.0.0,MIT
sshkey,1.9.0,MIT
sshpk,1.13.1,MIT
ssri,5.2.4,ISC
-state_machines,0.4.0,MIT
-state_machines-activemodel,0.4.0,MIT
-state_machines-activerecord,0.4.0,MIT
+state_machines,0.5.0,MIT
+state_machines-activemodel,0.5.1,MIT
+state_machines-activerecord,0.5.1,MIT
static-extend,0.1.2,MIT
statuses,1.3.1,MIT
statuses,1.4.0,MIT
@@ -1603,7 +1604,7 @@ tweetnacl,0.14.5,Unlicense
type-check,0.3.2,MIT
type-is,1.6.16,MIT
typedarray,0.0.6,MIT
-tzinfo,1.2.4,MIT
+tzinfo,1.2.5,MIT
u2f,0.2.1,MIT
uber,0.1.0,MIT
uglifier,2.7.2,MIT
@@ -1618,7 +1619,7 @@ undefsafe,2.0.2,MIT
underscore,1.7.0,MIT
underscore,1.8.3,MIT
unf,0.1.4,BSD
-unf_ext,0.0.7.4,MIT
+unf_ext,0.0.7.5,MIT
unicorn,5.1.0,ruby
unicorn-worker-killer,0.4.4,ruby
union-value,1.0.0,MIT
diff --git a/vendor/prometheus/values.yaml b/vendor/prometheus/values.yaml
index 859f2ad82a4..c432be72163 100644
--- a/vendor/prometheus/values.yaml
+++ b/vendor/prometheus/values.yaml
@@ -14,6 +14,7 @@ rbac:
create: false
server:
+ fullnameOverride: "prometheus-prometheus-server"
image:
tag: v2.1.0
diff --git a/yarn.lock b/yarn.lock
index af7bda5d562..55a86a9a577 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -54,9 +54,9 @@
lodash "^4.2.0"
to-fast-properties "^2.0.0"
-"@gitlab-org/gitlab-svgs@^1.16.0":
- version "1.16.0"
- resolved "https://registry.yarnpkg.com/@gitlab-org/gitlab-svgs/-/gitlab-svgs-1.16.0.tgz#6c88a1bd9f5b3d3e5bf6a6d89d61724022185667"
+"@gitlab-org/gitlab-svgs@^1.18.0":
+ version "1.18.0"
+ resolved "https://registry.yarnpkg.com/@gitlab-org/gitlab-svgs/-/gitlab-svgs-1.18.0.tgz#7829f0e6de0647dace54c1fcd597ee3424afb233"
"@types/jquery@^2.0.40":
version "2.0.48"
@@ -1859,9 +1859,9 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
dependencies:
delayed-stream "~1.0.0"
-commander@^2.13.0, commander@^2.9.0:
- version "2.14.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
+commander@^2.13.0, commander@^2.15.1, commander@^2.9.0:
+ version "2.15.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
commondir@^1.0.1:
version "1.0.1"