---
title: "bigbang en español: guía completa"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{bigbang en español: guía completa}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
```

## Qué hace bigbang

`bigbang` crea un metapaquete a partir de archivos locales `.tar.gz`, `.tar` o
`.zip`. Está pensado para equipos que distribuyen paquetes internos sin depender de
un repositorio en línea. La generación nunca instala componentes ni borra contenido
del directorio de trabajo.

La API pública usa nombres en inglés para ser consistente con el ecosistema de R:

- `create_metapackage()` crea la fuente del metapaquete.
- `install_local_pkg()` instala un archivo local y sus dependencias.
- `diagnose_dependencies()` busca dependencias implícitas.
- `scan_bigbang_artifact()` examina artefactos históricos sin cargarlos.

## Crear un metapaquete

Los nombres de `packages` incluyen la versión pero no la extensión:

```{r, eval = FALSE}
resultado <- create_metapackage(
  name = "equipoverse",
  packages = c("datos_1.2.0", "reportes_0.9.1"),
  pkg_dir = "ruta/a/instalables",
  ext = ".tar.gz",
  dest_dir = tempdir(),
  document = TRUE
)
resultado
```

El destino debe ser nuevo o estar vacío. Esta restricción evita conservar hooks o
scripts generados por versiones antiguas vulnerables. Nunca regenere in-place una
fuente cuya procedencia no haya sido verificada.

## Instalar y adjuntar componentes

La instalación es explícita. `library(equipoverse)` solo adjunta los componentes ya
instalados e informa cuáles faltan. Para instalar desde los archivos locales:

```{r, eval = FALSE}
library(equipoverse)
equipoverse_install()
```

El metapaquete generado lleva adentro los archivos de sus componentes, así que la
llamada no necesita argumentos. Eso también significa que para entregarlo a otra
persona alcanza con el `equipoverse_0.1.0.tar.gz` construido: lo instala y llama a
`equipoverse_install()`, sin la carpeta de archivos al lado y sin acordar ninguna
ruta de antemano. El valor predeterminado de `pkg_dir` es
`system.file("archives", package = "equipoverse")`, que se resuelve al ejecutar el
instalador y por eso apunta a la biblioteca donde quedó instalado.

Genere con `include_archives = FALSE` cuando los archivos deban permanecer en una
ubicación a la que todos los destinatarios ya tengan acceso; en ese caso
`equipoverse_install()` va a pedir un `pkg_dir` explícito.

La política predeterminada `cran_deps = "skip"` no accede a la red. Las alternativas
son `"error"` (falla sin red) e `"install"` (intenta instalar desde `repos`). Los
paquetes locales se instalan una sola vez en orden topológico; los ciclos producen
una condición `bigbang_error_cycle`.

`upgrade = "newer"` instala solo archivos más nuevos; `"always"` reinstala y
`"never"` conserva cualquier versión instalada. `force = TRUE` equivale a
`"always"`. Los metapaquetes generados ofrecen `<meta>_conflicts()` y respetan
`options(<meta>.quiet = TRUE)`. Si `cli` no está disponible, el mensaje de
arranque vuelve al banner ASCII sin fallar.

## Archivos ZIP

Un ZIP que contiene `Meta/package.rds` se considera un binario de Windows y solo se
instala en Windows con `type = "win.binary"`. Los demás ZIP con DESCRIPTION se
extraen en un directorio temporal propio y se instalan como fuente.

## Revisar artefactos anteriores

El escáner nunca carga el paquete y funciona en fuentes, tarballs, ZIP e
instalaciones:

```{r, eval = FALSE}
scan_bigbang_artifact("ruta/al/artefacto", dry_run = TRUE)
```

Si detecta firmas V1/V2/V3/V7, no ejecute `library()`, `devtools::document()` ni
hooks del artefacto. Genere una versión nueva en una ruta vacía con la versión actual
de `bigbang`, vuelva a escanearla y recién entonces constrúyala e instálela.

## Más allá del caso simple

Los ejemplos usan la entrada más simple: stems resueltos en un directorio. No es
un requisito. Cualquier elemento de `packages` que sea un archivo existente se usa
como ruta, así que los componentes pueden venir de varios directorios en una misma
llamada, mezclar `.tar.gz`, `.tar` y `.zip`, y no llevar la versión en el nombre
—la identidad y la versión salen del `DESCRIPTION` de cada archivo—. Un componente
también puede ser un directorio fuente, que se empaqueta con el paquete opcional
`pkgbuild`, o la lista entera puede vivir en un manifiesto bajo control de
versiones.

Dos opciones que conviene conocer antes de generar algo en serio:

```r
plan <- create_metapackage(..., dry_run = TRUE)
plan$order      # el orden de instalación que se usaría
plan$findings   # todos los hallazgos de validación, sin escribir nada
```

`dry_run = TRUE` no crea el destino. Y `update = TRUE` regenera un proyecto
existente en el mismo lugar, reescribiendo solo los archivos que bigbang escribió
—se niega si alguno fue modificado a mano, y nunca toca lo que no escribió—.

Vea `?create_metapackage` para el conjunto completo, incluido
`on_component_error` para generar a partir de un conjunto parcialmente roto,
`tolerate` para relajar de a una las verificaciones de prolijidad, e
`install_upgrade` para fijar la política de actualización del instalador emitido.

## Idioma

Los mensajes de ejecución tienen inglés como fuente y traducción completa al
español mediante gettext. En R 4.2 o posterior puede usar
`Sys.setLanguage("es")`; en versiones anteriores, defina `LANGUAGE=es` antes de
iniciar R. La ayuda Rd se publica en inglés, como requiere CRAN. Cuando
`rhelpi18n` madure y llegue a CRAN se evaluará publicar un módulo separado
`bigbang.es` para traducir también la ayuda interactiva.
