1
+ """
2
+ /*
3
+ * EJERCICIO:
4
+ * ¡Me voy de viaje al GitHub Universe 2024 de San Francisco!
5
+ *
6
+ * Desarrolla un CLI (Command Line Interface) que permita
7
+ * interactuar con Git y GitHub de manera real desde terminal.
8
+ *
9
+ * El programa debe permitir las siguientes opciones:
10
+ * 1. Establecer el directorio de trabajo
11
+ * 2. Crear un nuevo repositorio
12
+ * 3. Crear una nueva rama
13
+ * 4. Cambiar de rama
14
+ * 5. Mostrar ficheros pendientes de hacer commit
15
+ * 6. Hacer commit (junto con un add de todos los ficheros)
16
+ * 7. Mostrar el historial de commits
17
+ * 8. Eliminar rama
18
+ * 9. Establecer repositorio remoto
19
+ * 10. Hacer pull
20
+ * 11. Hacer push
21
+ * 12. Salir
22
+ *
23
+ * Puedes intentar controlar los diferentes errores.
24
+ */
25
+ """
26
+ import os
27
+
28
+ class GitCLI :
29
+ def __init__ (self ):
30
+ self .directorio = None
31
+ self .remoto = None
32
+
33
+ def mostrar_info (self ):
34
+ print (f"Directorio de trabajo: { self .directorio } " )
35
+ print (f"Repositorio remoto: { self .remoto } " )
36
+ def asignar_directorio (self ):
37
+ self .directorio = input ("Introduce el directorio de trabajo: " )
38
+ os .chdir (self .directorio )
39
+
40
+ def nuevo_repositorio (self ):
41
+ os .system ("git init" )
42
+ os .system ("git branch -m main" )
43
+
44
+ def crear_rama (self ):
45
+ nombre_rama = input ("Introduce el nombre de la rama para crear: " )
46
+ os .system (f"git branch { nombre_rama } " )
47
+
48
+ def cambiar_rama (self ):
49
+ nombre_rama = input ("Introduce el nombre de la rama a cambiar: " )
50
+ os .system (f"git checkout { nombre_rama } " )
51
+
52
+ def mostrar_ficheros_pendientes (self ):
53
+ os .system ("git status -s" )
54
+
55
+ def hacer_commit (self ):
56
+ os .system ("git add ." )
57
+ mensaje = input ("Introduce el mensaje del commit: " )
58
+ os .system (f"git commit -m { mensaje } " )
59
+
60
+ def historial_commits (self ):
61
+ os .system ("git log" )
62
+
63
+ def eliminar_rama (self ):
64
+ nombre_rama = input ("Introduce el nombre de la rama a eliminar: " )
65
+ os .system (f"git branch -d { nombre_rama } " )
66
+
67
+ def establecer_remoto (self ):
68
+ url = input ("Introduce la URL del repositorio remoto: " )
69
+ os .system (f"git remote add origin { url } " )
70
+ self .remoto = url
71
+ os .system ("git push -u origin main" )
72
+
73
+ def hacer_pull (self ):
74
+ os .system ("git pull origin main" )
75
+
76
+ def hacer_push (self ):
77
+ os .system ("git push" )
78
+
79
+ def bucle (self ):
80
+ while True :
81
+ self .mostrar_info ()
82
+ print ("\n Selecciona una opción: " )
83
+ print ("1. Establecer el directorio de trabajo" )
84
+ print ("2. Crear un nuevo repositorio" )
85
+ print ("3. Crear una nueva rama" )
86
+ print ("4. Cambiar de rama" )
87
+ print ("5. Mostrar ficheros pendientes de hacer commit" )
88
+ print ("6. Hacer commit" )
89
+ print ("7. Mostrar el historial de commits" )
90
+ print ("8. Eliminar rama" )
91
+ print ("9. Establecer repositorio remoto" )
92
+ print ("10. Hacer pull" )
93
+ print ("11. Hacer push" )
94
+ print ("12. Salir" )
95
+
96
+ option = input ("Opción: " )
97
+
98
+ match option :
99
+ case "1" :
100
+ self .asignar_directorio ()
101
+ case "2" :
102
+ self .nuevo_repositorio ()
103
+ case "3" :
104
+ self .crear_rama ()
105
+ case "4" :
106
+ self .cambiar_rama ()
107
+ case "5" :
108
+ self .mostrar_ficheros_pendientes ()
109
+ case "6" :
110
+ self .hacer_commit ()
111
+ case "7" :
112
+ self .historial_commits ()
113
+ case "8" :
114
+ self .eliminar_rama ()
115
+ case "9" :
116
+ self .establecer_remoto ()
117
+ case "10" :
118
+ self .hacer_pull ()
119
+ case "11" :
120
+ self .hacer_push ()
121
+ case "12" :
122
+ break
123
+ case _:
124
+ print ("Opcion incorrecta" )
125
+
126
+ # Prueba
127
+
128
+ if __name__ == "__main__" :
129
+ cli = GitCLI ()
130
+ cli .bucle ()
0 commit comments