# 🔄 Actualizar Catalogue desde cd-system

## 🎯 Objetivo

Después de propagar cambios desde `catalogue` a `cd-system`, es importante actualizar `catalogue` para:
- ✅ Mantener sincronización con el core
- ✅ Obtener las últimas mejoras del core
- ✅ Evitar divergencias

---

## 📋 Proceso de Actualización

### Paso 1: Configurar Upstream (Solo la primera vez)

```bash
cd /Applications/XAMPP/xamppfiles/htdocs/catalogue

# Agregar cd-system como upstream
git remote add upstream https://github.com/LACOMPANIADIGITAL/cd-system.git

# Verificar que se agregó
git remote -v
```

### Paso 2: Obtener Cambios del Core

```bash
# Obtener cambios desde cd-system
git fetch upstream cd-system

# Ver qué cambios hay disponibles
git log HEAD..upstream/cd-system --oneline
```

### Paso 3: Revisar Cambios

```bash
# Ver diferencias
git diff HEAD..upstream/cd-system --name-only

# Ver diferencias específicas (ejemplo)
git diff HEAD..upstream/cd-system app/Helpers/MetaTagsHelper.php
```

### Paso 4: Aplicar Cambios

#### Opción 1: Merge (Recomendado)

```bash
# Hacer merge de los cambios del core
git merge upstream/cd-system --no-edit

# Si hay conflictos, resolverlos
# Los archivos protegidos (.gitattributes) no deberían tener conflictos
```

#### Opción 2: Rebase (Si prefieres historial lineal)

```bash
# Hacer rebase de los cambios del core
git rebase upstream/cd-system

# Si hay conflictos, resolverlos y continuar
# git rebase --continue
```

### Paso 5: Verificar y Probar

```bash
# Verificar que no hay problemas
git status

# Limpiar cache de Laravel
php artisan config:clear
php artisan cache:clear

# Probar que todo funciona
php artisan tinker
>>> use App\Helpers\MetaTagsHelper;
>>> MetaTagsHelper::getTitle('Test');
```

---

## 🔄 Flujo Completo: Propagación + Actualización

### Escenario: Desarrollar y Propagar Mejora

```bash
# 1. Desarrollar mejora en catalogue
cd /Applications/XAMPP/xamppfiles/htdocs/catalogue
# ... desarrollar cambios ...
git add -A
git commit -m "feat: Nueva mejora"
git push origin cd-system

# 2. Propagar a cd-system
./scripts/send-to-cd-system.sh
# Confirmar y aplicar cambios

# 3. Actualizar catalogue desde cd-system
git fetch upstream cd-system
git merge upstream/cd-system --no-edit

# 4. Verificar que todo está sincronizado
git log --oneline -5
```

---

## ⚠️ Manejo de Conflictos

### Archivos Protegidos

Los siguientes archivos están protegidos por `.gitattributes` y **NO deberían tener conflictos**:

- `config/cd-system.php`
- `config/site.php`
- `public/cd-project/assets/*`

Si hay conflictos en estos archivos, significa que algo está mal configurado.

### Archivos que Pueden Tener Conflictos

- `composer.json` - Si hay dependencias diferentes
- `app/helpers.php` - Si hay helpers diferentes
- Vistas - Si hay personalizaciones específicas

### Resolver Conflictos

```bash
# Ver archivos en conflicto
git status

# Resolver manualmente cada conflicto
# Luego:
git add <archivo-resuelto>
git commit
```

---

## 📋 Checklist de Actualización

### Antes de Actualizar:

- [ ] Cambios propagados a cd-system están commiteados
- [ ] No hay cambios sin commitear en catalogue
- [ ] Backup realizado (opcional pero recomendado)

### Después de Actualizar:

- [ ] No hay conflictos sin resolver
- [ ] Cache de Laravel limpiado
- [ ] Proyecto funciona correctamente
- [ ] Cambios pusheados a origin (opcional)

---

## 🔍 Verificación de Sincronización

### Verificar que está sincronizado:

```bash
# Ver commits que están en cd-system pero no en catalogue
git log HEAD..upstream/cd-system --oneline

# Si no hay salida, está sincronizado ✅

# Ver commits que están en catalogue pero no en cd-system
git log upstream/cd-system..HEAD --oneline

# Estos deberían ser solo commits específicos del proyecto
```

---

## 🚀 Script de Actualización Automática (Opcional)

Puedes crear un script para automatizar el proceso:

```bash
#!/bin/bash
# scripts/update-from-cd-system.sh

cd "$(dirname "$0")/.."

echo "🔄 Actualizando desde cd-system..."

# Fetch
git fetch upstream cd-system

# Ver cambios
echo ""
echo "📋 Cambios disponibles:"
git log HEAD..upstream/cd-system --oneline

# Preguntar confirmación
read -p "¿Deseas aplicar estos cambios? (y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    git merge upstream/cd-system --no-edit
    php artisan config:clear
    php artisan cache:clear
    echo "✅ Actualización completada"
else
    echo "❌ Actualización cancelada"
fi
```

---

## 📚 Documentación Relacionada

- `docs/bewpro/system/FLUJO-BIDIRECCIONAL-COMPLETO.md` - Flujo completo
- `docs/bewpro/system/ENVIAR-CAMBIOS-A-CD-SYSTEM.md` - Cómo propagar cambios
- `docs/FLUJO-CAMBIOS-BIDIRECCIONAL.md` - Flujo general

---

**Última actualización:** Noviembre 2024

