From: Leandro Lucarella Date: Mon, 21 Mar 2005 00:04:38 +0000 (+0000) Subject: Se hace que se conserven las pruebas para facilitar la corrección. X-Git-Tag: svn_import~35 X-Git-Url: https://git.llucax.com/software/sercom-old.git/commitdiff_plain/6285de9c71f4ea14723dc752aa8048efd150a47a?ds=inline Se hace que se conserven las pruebas para facilitar la corrección. --- diff --git a/src/sc_test b/src/sc_test index 1e3010a..479f75e 100755 --- a/src/sc_test +++ b/src/sc_test @@ -91,15 +91,16 @@ Salida: intento.observaciones = msg + '\n\n' log.debug(msg) -def preparar(intento): +def preparar(intento, caso_de_prueba): # Creo chroot - TODO copiarlo de algún lado donde ande el valgrind? - os.mkdir(intento.chrootPath) + os.makedirs(intento.chrootPath(caso_de_prueba)) shutil.copy(os.path.join(intento.path, 'tp'), - os.path.join(intento.chrootPath, 'tp')) + os.path.join(intento.chrootPath(caso_de_prueba), 'tp')) -def limpiar(intento): +def limpiar(intento, caso_de_prueba): # Borro chroot entero - shutil.rmtree(intento.chrootPath) + #shutil.rmtree(intento.chrootPath) + os.unlink(os.path.join(intento.chrootPath(caso_de_prueba), 'tp')) def probar(intento, caso_de_prueba, mail): def diff(prueba, mail, orig, new, name, origname='alumno', newname='catedra', longname=None): @@ -140,9 +141,9 @@ def probar(intento, caso_de_prueba, mail): log.debug('Caso de prueba: %s', prueba.casoDePrueba) # Abro archivos para fds básicos options = { - 'cwd': intento.chrootPath, + 'cwd': intento.chrootPath(caso_de_prueba), 'close_fds': True, - 'preexec_fn': secure_process(intento.chrootPath, uid, gid, tiempo_cpu), + 'preexec_fn': secure_process(intento.chrootPath(caso_de_prueba), uid, gid, tiempo_cpu), } if usa_stdin(): options['stdin'] = file(os.path.join(caso_de_prueba.path, 'stdin'), 'r') @@ -235,7 +236,7 @@ def probar(intento, caso_de_prueba, mail): obs += "* Falta el archivo de salida '%s'.\n" % f continue obs += diff(prueba, mail, - file(os.path.join(intento.chrootPath, f)).readlines(), + file(os.path.join(intento.chrootPath(caso_de_prueba), f)).readlines(), file(os.path.join(caso_de_prueba.pathSalidas, f)).readlines(), caso_de_prueba.nombre + '.' + f) for f in prueba.archivosSalida - (caso_de_prueba.archivosSalida | caso_de_prueba.archivosEntrada): @@ -416,14 +417,14 @@ while continuar: resultado = True for caso_de_prueba in intento.entrega.ejercicio.casosDePrueba: # Preparo chroot - preparar(intento) + preparar(intento, caso_de_prueba) # Pruebo y agrego prueba a la lista prueba = probar(intento, caso_de_prueba, mail) if not prueba.casoDePrueba.privado and not prueba.pasada: log.info('Prueba %s no pasada' % prueba.casoDePrueba.nombre) resultado = False # Limpio chroot - limpiar(intento) + limpiar(intento, caso_de_prueba) intento.finPruebas = datetime.datetime.now() # Envío mail con resultado al alumno if resultado: diff --git a/src/sercom/sqlo.py b/src/sercom/sqlo.py index 47069f5..aba430a 100644 --- a/src/sercom/sqlo.py +++ b/src/sercom/sqlo.py @@ -163,6 +163,9 @@ class Intento(BaseSQLObject): finPruebas=None, connection=connection).count() return no_compilados + no_probados + def chrootPath(self, caso_de_prueba): + return path.join(self.path, 'pruebas', caso_de_prueba.nombre) + def _get_path(self): curso = self.inscripto.curso entrega = self.entrega @@ -171,9 +174,6 @@ class Intento(BaseSQLObject): '%s.%s.%s' % (curso.curso, entrega.nroEjercicio, entrega.entrega), '%s.%s' % (self.inscripto.padron, self.numero)) - def _get_chrootPath(self): - return path.join(self.path, 'chroot') - def _get_pruebasPasadas(self): if not self.compila: return False for p in self.pruebas: @@ -217,7 +217,7 @@ class Prueba(BaseSQLObject): def _get_archivosSalida(self): ent = self.casoDePrueba.archivosEntrada sal = self.casoDePrueba.archivosSalida - return frozenset([f for f in os.listdir(self.intento.chrootPath) \ + return frozenset([f for f in os.listdir(self.intento.chrootPath(self.casoDePrueba)) \ if f in sal or f not in ent and f <> 'tp']) # vim: set et sw=4 sts=4 :