Listar todas las ramas del git -- javascript campo con node.js campo con git camp codereview Relacionados El problema

List all the git branches


3
vote

problema

Español

He escrito un script de juguete para enumerar todas las sucursales GIT en cwd . Estoy interesado en saber cómo puedo hacer que este código sea más modular y flexible. Por ejemplo, me gustaría tener características como:

  1. LISTA SOLAMENTE RAMAS LOCALES.
  2. listar solo las ramas remotas.
  3. etc.

  const os = require('os'); const cp = require('child_process');  const REGEX_STAR = /^*s*/g;  const promiseExec = (cmd) =>   new Promise((resolve, reject) => {     cp.exec(cmd, (err, stdout, stderr) => {       if (err) {         return reject(err);       }       resolve(lines(`${stdout}`));     });   });  const lines = (str) =>   str.trim().split(os.EOL).map((line) =>     line.trim().replace(REGEX_STAR, '')   );  const branches = () =>   promiseExec('git branch -a')     .then((res) => {       console.log(res);     });  branches();   
Original en ingles

I have written a toy script to list all the git branches in cwd. I am interested in knowing how can I make this code more modular and flexible. For example I would like to have features like:

  1. List only local branches.
  2. List only remote branches.
  3. Etc.

const os = require('os'); const cp = require('child_process');  const REGEX_STAR = /^\*\s*/g;  const promiseExec = (cmd) =>   new Promise((resolve, reject) => {     cp.exec(cmd, (err, stdout, stderr) => {       if (err) {         return reject(err);       }       resolve(lines(`${stdout}`));     });   });  const lines = (str) =>   str.trim().split(os.EOL).map((line) =>     line.trim().replace(REGEX_STAR, '')   );  const branches = () =>   promiseExec('git branch -a')     .then((res) => {       console.log(res);     });  branches(); 
        
   
   

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Solo devuelve los datos y déjelo al consumidor qué hacer con él. De esa manera, 9988776655544330 se convierte en un grabador de datos genérico. Si desea tener funciones de impresora, manténgalos separados del comando RAW.

La envoltura de su promesa parece esperar la salida del comando 9988776665544331 . Mueva el uso de lines al branches Función en su lugar.

Además, las funciones de flecha con argumentos únicos pueden omitir los parentes.

  const promiseExec = (cmd) => new Promise((resolve, reject) => {   cp.exec(cmd, (err, stdout, stderr) => {     if (err) reject(err);     else resolve(stdout);   }); });  const branchLines = (str) => str.trim().split(os.EOL).map(line => line.trim().replace(REGEX_STAR, ''));  const branches = () => promiseExec('git branch -a').then(res => branchLines(res));  const printBranches = () => branches().then(res => console.log(res));  // Print manually branches().then(res => console.log(res));  // or have a printer function do it printbranches();   
 

Just return the data and leave it to the consumer what to do with it. That way, branches becomes a generic data grabber. If you want to have printer functions, keep them separate from the raw command.

Your Promise wrapper appears to expect the output of the branches command. Move the use of lines to the branches function instead.

Also, arrow functions with single arguments can omit the parens.

const promiseExec = (cmd) => new Promise((resolve, reject) => {   cp.exec(cmd, (err, stdout, stderr) => {     if (err) reject(err);     else resolve(stdout);   }); });  const branchLines = (str) => str.trim().split(os.EOL).map(line => line.trim().replace(REGEX_STAR, ''));  const branches = () => promiseExec('git branch -a').then(res => branchLines(res));  const printBranches = () => branches().then(res => console.log(res));  // Print manually branches().then(res => console.log(res));  // or have a printer function do it printbranches(); 
 
 
 
 

Relacionados problema

4  Descarga un git repo sin .git carpeta  ( Download a git repo without git folder ) 
Viniendo de Python, JavaScript y PHP, me gustaría aprender a escribir Ruby en la forma en que se "supone". El código de Python bien escrito se llama "Pythonic...

2  Programa de Kotlin para resumir Git Comets by Rogex Match  ( Kotlin program to summarize git commits by regex match ) 
Estoy tratando de aprender Kotlin. Vengo de algunos antecedentes en Java. Como ejercicio de aprendizaje, escribí este programa simple para resumir las ocurren...

3  Restablecer archivos en GIT que se muestran como modificados pero no tienen cambios de acuerdo con "Git Diff"  ( Reset files in git which show as modified but have no changes according to git ) 
Este parece para estar funcionando, pero también es bastante lento y me parece un poco hackeado. IFS=$' ' for currentFile in $(git status | grep "modifi...

5  Herramienta para calcular el tiempo promedio que toma para una solicitud de tracción GitHub para fusionar  ( Tool to calculate the average time that takes for a github pull request to get m ) 
Estoy aprendiendo, y este es mi primer intento de una herramienta de línea de comandos que usa la API de GitHub para calcular el tiempo promedio que toma una ...

8  Bash Script para clonar todos los repositores públicos o gistas para un usuario específico, opcionalmente a un directorio de elección  ( Bash script to clone all public repos or gists for a specified user optionally ) 
Escribí este script como una forma de hacer una copia de seguridad y / o descargar rápidamente un conjunto de repos o gistas de un usuario. No tengo ninguna p...

10  Nivel faltante de profundidad técnica (ancestro común)  ( Missing level of technical depth common ancestor ) 
Recientemente le hemos dado una prueba de codificación en una compañía de TI de buena reputación. Hubo tres preguntas de codificación. me rechazaron diciend...

4  Script de rubí para crear repos de git  ( Ruby script to create git repos ) 
Escribí mi primer script de rubí, por este tutorial . Crea un repo de git local y remoto. He estado trabajando durante aproximadamente 3 años con PHP, y de...

10  Script de bash para simplificar el flujo de trabajo de implementación del GIT  ( Bash script to simplify git deployment workflow ) 
En mi empresa, sigo el siguiente flujo de trabajo. (Creo que se puede definir un tipo de 'integración continua'.) flujo de trabajo: Tenemos 3 sucursale...

1  Git AutoUpandater  ( Git autoupdater ) 
En mi oficina, tenemos una herramienta de monitoreo interno que utilizamos en los sistemas de clientes para monitorear varios vitales y notificarnos a través ...

5  Base para la iteración sobre la historia del git  ( Base for iterating over git history ) 
Quería hacer algunas estadísticas sobre la historia de un repositorio de git. Al principio, intenté usar Gitpython, pero no era tan trivial como lo imaginaba....




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos