mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 13:28:25 +00:00 
			
		
		
		
	Clone repository with Tea CLI (#33725)
This PR adds "Tea CLI" as a clone method. <img width="350" alt="Capture d’écran 2025-02-25 à 23 38 47" src="https://github.com/user-attachments/assets/8e86e54a-998b-45d1-9f20-167b449e79b6" /> --------- Signed-off-by: Quentin Guidée <quentin.guidee@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		@@ -53,20 +53,49 @@ export function substituteRepoOpenWithUrl(tmpl: string, url: string): string {
 | 
			
		||||
function initCloneSchemeUrlSelection(parent: Element) {
 | 
			
		||||
  const elCloneUrlInput = parent.querySelector<HTMLInputElement>('.repo-clone-url');
 | 
			
		||||
 | 
			
		||||
  const tabSsh = parent.querySelector('.repo-clone-ssh');
 | 
			
		||||
  const tabHttps = parent.querySelector('.repo-clone-https');
 | 
			
		||||
  const tabSsh = parent.querySelector('.repo-clone-ssh');
 | 
			
		||||
  const tabTea = parent.querySelector('.repo-clone-tea');
 | 
			
		||||
  const updateClonePanelUi = function() {
 | 
			
		||||
    const scheme = localStorage.getItem('repo-clone-protocol') || 'https';
 | 
			
		||||
    const isSSH = scheme === 'ssh' && Boolean(tabSsh) || scheme !== 'ssh' && !tabHttps;
 | 
			
		||||
    if (tabHttps) {
 | 
			
		||||
      tabHttps.textContent = window.origin.split(':')[0].toUpperCase(); // show "HTTP" or "HTTPS"
 | 
			
		||||
      tabHttps.classList.toggle('active', !isSSH);
 | 
			
		||||
    }
 | 
			
		||||
    if (tabSsh) {
 | 
			
		||||
      tabSsh.classList.toggle('active', isSSH);
 | 
			
		||||
    let scheme = localStorage.getItem('repo-clone-protocol');
 | 
			
		||||
    if (!['https', 'ssh', 'tea'].includes(scheme)) {
 | 
			
		||||
      scheme = 'https';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fallbacks if the scheme preference is not available in the tabs, for example: empty repo page, there are only HTTPS and SSH
 | 
			
		||||
    if (scheme === 'tea' && !tabTea) {
 | 
			
		||||
      scheme = 'https';
 | 
			
		||||
    }
 | 
			
		||||
    if (scheme === 'https' && !tabHttps) {
 | 
			
		||||
      scheme = 'ssh';
 | 
			
		||||
    } else if (scheme === 'ssh' && !tabSsh) {
 | 
			
		||||
      scheme = 'https';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const isHttps = scheme === 'https';
 | 
			
		||||
    const isSsh = scheme === 'ssh';
 | 
			
		||||
    const isTea = scheme === 'tea';
 | 
			
		||||
 | 
			
		||||
    if (tabHttps) {
 | 
			
		||||
      tabHttps.textContent = window.origin.split(':')[0].toUpperCase(); // show "HTTP" or "HTTPS"
 | 
			
		||||
      tabHttps.classList.toggle('active', isHttps);
 | 
			
		||||
    }
 | 
			
		||||
    if (tabSsh) {
 | 
			
		||||
      tabSsh.classList.toggle('active', isSsh);
 | 
			
		||||
    }
 | 
			
		||||
    if (tabTea) {
 | 
			
		||||
      tabTea.classList.toggle('active', isTea);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let tab: Element;
 | 
			
		||||
    if (isHttps) {
 | 
			
		||||
      tab = tabHttps;
 | 
			
		||||
    } else if (isSsh) {
 | 
			
		||||
      tab = tabSsh;
 | 
			
		||||
    } else if (isTea) {
 | 
			
		||||
      tab = tabTea;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const tab = isSSH ? tabSsh : tabHttps;
 | 
			
		||||
    if (!tab) return;
 | 
			
		||||
    const link = toOriginUrl(tab.getAttribute('data-link'));
 | 
			
		||||
 | 
			
		||||
@@ -84,12 +113,16 @@ function initCloneSchemeUrlSelection(parent: Element) {
 | 
			
		||||
 | 
			
		||||
  updateClonePanelUi();
 | 
			
		||||
  // tabSsh or tabHttps might not both exist, eg: guest view, or one is disabled by the server
 | 
			
		||||
  tabHttps?.addEventListener('click', () => {
 | 
			
		||||
    localStorage.setItem('repo-clone-protocol', 'https');
 | 
			
		||||
    updateClonePanelUi();
 | 
			
		||||
  });
 | 
			
		||||
  tabSsh?.addEventListener('click', () => {
 | 
			
		||||
    localStorage.setItem('repo-clone-protocol', 'ssh');
 | 
			
		||||
    updateClonePanelUi();
 | 
			
		||||
  });
 | 
			
		||||
  tabHttps?.addEventListener('click', () => {
 | 
			
		||||
    localStorage.setItem('repo-clone-protocol', 'https');
 | 
			
		||||
  tabTea?.addEventListener('click', () => {
 | 
			
		||||
    localStorage.setItem('repo-clone-protocol', 'tea');
 | 
			
		||||
    updateClonePanelUi();
 | 
			
		||||
  });
 | 
			
		||||
  elCloneUrlInput.addEventListener('focus', () => {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user