Bienvenido a Root4ever!
En Root4ever no usamos publicidad agresiva!
No nos gusta molestar a los usuarios, pero agradeceríamos mucho que nos incluyeras en la lista de paginas permitidas en tu Adblock o lo desactivaras en nuestro sitio, así nos ayudarás a mantener la página operativa. :-)
Al igual que a nosotros, no nos gusta que nos obliguen a algo queriendo nosotros elegir, por este motivo puedes cerrar la ventana en la parte superior izquierda para disfrutar del contenido.
Solo te irá saliendo este aviso, puedes cerrarlo tantas veces como necesites.
Una vez añadidos no volverá a aparecer este aviso.

Gracias por visitarnos!



Comparte en Google+ que te gusta esto!!  Comparte en FaceBook que te gusta esto!!  Twittea que te gusta esto!
Translate!   Traduce esta página al Español!!   Translate this page into English!  
Enviar respuesta 
Tutorial Como hacer cherry-picks
21-11-2013, 12:06 AM
Mensaje: #1

El 95% de los archivos necesarios publicados en las guías de Root4ever se encuentran en nuestros discos duros!
Este aporte no está completo?
REPORTARLO HACIENDO CLIC AQUÍ! Tan pronto podamos re-subiremos los archivos necesarios!!
Mejoremos entre todos! Hagamos de Root4ever una comunidad mejor! :-)

Como hacer cherry-picks
NOTA:
Para este tutorial voy a dar por sabido algunas cosas que ya fueron explicadas aquí http://foro.root4ever.com/showthread.php?tid=861

Que es?
Es un comando git que sirve para aplicar un commit de una rama dentro de nuestro código. Principalmente nos vamos a centrar en aplicar commits que se encuentran subidos a un servidor.
Para que se pueda entender mejor, un commit equivaldría a un mod, ejemplo, modificar tamaño del navbar, halo, multiventana... No es exactamente así, puede que para un mod sea necesario más de un commit.

Donde buscar commits?
En el tutorial me voy a centrar en dos sitios para conseguir los commits, desde gerrit y desde github. Se puede decir que es un medio hacia un fin. Vamos a conseguir lo mismo, pero el procedimiento es distinto.
Me tomo la libertad de pensar que si has llegado hasta aquí sabes lo que es github y gerrit, y para que sirve.
Como casi todos sabréis la mayoría de mods son hechos por CyanogenMOD, por lo tanto yo recomiendo buscar estos commits en sus repositorios:
Gerrit: http://review.cyanogenmod.org/
Github: https://github.com/CyanogenMod

Lógicamente estos mods los podeís sacar de otros sitios, simplemente es buscar en el código de la rom que más os guste.

Empezemos
Para aplicar un cherry-pick se tiene que hacer desde el código, antes de compilar, no es posible hacer eso desde el zip decompilando las apk. Como la mayoría de gente compila desde linux voy a centrarme en sistemas operativos basados en este kernel, principalmente en ubuntu.

Commit sacado desde Github o parecidos
Nada mejor que un ejemplo explicado para entender las cosas bien.
El primer ejemplo es muy sencillo y no vamos a tener ningún problema.
Vamos a introducir en el menú de apagado la opción de reiniciar y de capturar pantalla.
El commit lo vamos a sacarlo del código fuente de rascarlo: https://github.com/rascarlo/android_fram...a6f21c1536

Para ello nos fijamos en esta parte: android_frameworks_base
Esto nos indica en que carpeta debemos ir:
(Todo desde el terminal)
Código:
cd ~/codigo/frameworks/base
*cambiamos codigo por el nombre de donde tengáis el código.

Código:
git remote add -f PowerMenu https://github.com/rascarlo/android_frameworks_base
NOTA:
PowerMenu es un nombre que le ponemos, podemos poner lo que queramos, pero nunca podemos repetirlo (nos dará error).
La parte del URL poneís el repositorio donde se encuentre el código.
La parte -f equivale ha hacer
Código:
git fetch URL

Luego seguimos con el siguiente comando:
Código:
git cherry-pick b6ebfe3f4be16a8e36cb474bd92895a6f21c1536
Donde b6ebfe3f4be16a8e36cb474bd92895a6f21c1536 es el SHA del commit, como podéis ver se puede encontrar dentro del commit o en el propio URL.

Felicidades! Ya tenemos el commit aplicado. Basándome en AOSP 4.3 no ha habido ningún conflicto. Nos tiene que aparecer el terminal de esta forma:

Imagen

Esto no siempre es así, muchas veces a la hora de aplicar el commit aparecen conflictos debido a que en el código del commit hay cosas que en el nuestro no hay o viceversa. En este caso tendríamos de resolver los conflictos. Vamos hacer un ejemplo de este tipo.

Los conflictos pueden ser de muchas formas, los hay que son muy fáciles y en nada ya están solucionados y otros que son muy dificiles y tienes que cambiar muchas cosas. Para el ejemplo utilizaremos el primer commit de Halo, que es bastante complicado, más bien, laborioso. Este commit no es fácil y si es el primer commit que poneis no deberíais ponerlo. Yo usaré este commit de ejemplo para poder explicar otro concepto y así matar dos pájaros de un tiro.
Si queréis empezar por un commit más fácil yo os recomiendo por el commit de la multiventana, que está muy de moda y es bastante fácil. De este commit hablaré más adelante.

Halo, vamos a buscar conflictos

Lo primero que tenéis que hacer, como supongo que sabréis, es aplicar el cherry-pick (siguiendo los pasos anteriores).
Commit: https://github.com/ParanoidAndroid/andro...db8497c333

Y nos sale este error:
Código:
error: EL commit 518c329e8c67fa96b8a8fc22e1962ddb8497c333 es una combinación pero no se ha dado la opción -m.
fatal: cherry-pick failed

Esto sucede en algunos commits, no suelen ser muchos y, por eso, yo recomiendo hacerlo todos normal y cuando salga este error aplicar la solución.
Como dice falta una -m, pero después hay que poner un 1.
Tiene que quedar así:
Código:
git cherry-pick -m 1 518c329e8c67fa96b8a8fc22e1962ddb8497c333
Y nos sale esto:

Imagen

Lo que más nos interesa es esto:
Código:
error: no se puede aplicar 518c329... HALO (1/2)
consejo: después de la resolución de conflictos, marcar las rutas corregidas
consejo: con «git add <paths>» o «git rm <paths>»
consejo: y hacer commit del resultado con «git commit»
Esto nos indica que ha habido conflictos. Para ver que archivos ha habido conflictos hacemos git status. Los archivos en verde han estado modificados correctamente (que esto no significa que no de errores al compilar) y los archivos en rojo tienen conflictos.

Imagen

Vamos abrir el primer archivo Activity.java que se encuentra en core/java/android/app/Activity.java
En este archivo nos encontramos esto:
Código:
<<<<<<< HEAD
=======
import android.util.ExtendedPropertiesUtils;
import android.util.DisplayMetrics;
>>>>>>> 518c329... HALO (1/2)

Código:
<<<<<<< HEAD
Esto indica que empieza un conflicto dentro del archivo. (Usad el buscador, puede haber más de uno)
Código:
=======
El texto que aparece arriba de esto es código que tenemos en nuestro archivo y no está en el código de donde cogemos el commit.
El código que aparece abajo es código que nosotros no tenemos y el commit sí.
Código:
>>>>>>> 518c329... HALO
Esto indica el final del conflicto

Para solucionar este error (y todos en general) debemos fijarnos en el commit original (el github, en este caso). Buscamos este archivo y, como se puede ver, solo añade
Código:
import android.util.DisplayMetrics;
Esto lo necesitamos en este archivo, pero el otro import no lo añade, así que en principio debemos eliminarlo.

Una vez hemos arreglado todos los conflictos que hay en este archivo le decimos a git que ya está todo arreglado, hacemos:
Código:
git add core/java/android/app/Activity.java
Ahora al hacer git status aparecerá en verde, esto significa que le hemos dicho a git que todo esta correcto en aquel archivo (que no significa que lo esté)

Una vez hayamos solucionado todos los archivos es hora de compilar. Lo más seguro es que aparezcan errores, a partir de aquí se tienen que solucionar hasta que compile y funcione bien.

Cuando todo funciona vamos a subir el commit a nuestro repositorio:
Código:
git commit
Aparecerá el editor de texto. Una vez guardemos y salgamos ya se habrá guardado el commit. Solo falta subirlo con git push.

GERRIT

En gerrit es otro lugar donde podemos encontrar commits, CM tiene el suyo, Slim , OmniRom, Paranoid

Por ejemplo, encontramos el commit de la multiventana de OmniRom (android 4.3)
https://gerrit.omnirom.org/#/c/53/
Hacer un cherry-pick de aquí es mucho más fácil. Nos sale una opción directamente, simplemente copiar y pegar.

Imagen

Otros

Esta parte es gracias a @furious

Este comando sirve para fusionar cherrys sin conflictos y poder editar las cosas.

Código:
git cherry-pick -n <sha>

-n= --no-commit

Cambias lo que tengas que cambiar, luego ya haces git add . y git commit -a.
Hay que decir que de esa forma no aparece quien es el autor original del commit, siempre estaría bien poner el link del commit original para respetar a su autor original.
Cita este mensaje en tu respuesta
[-] Los siguientes usuarios dan las gracias por este este post:
, chujalt, Mr.T3ach3r, Pollos
Publicidad.

Enviar respuesta 


Posibles temas similares...
Tema: Autor Respuestas: Vistas: Último mensaje
  [Tutorial] CÓMO SE AGREGAN FUNCIONES A UN KERNEL. Root 5 2,942 14-03-2015 12:27 AM
Último mensaje: Root
  [Tutorial] Como utilizar el Github para la cocina del código sin morir. "By: mbc596" mbc596 3 31,346 13-03-2015 10:03 PM
Último mensaje: Makova
  [Tutorial] Como compilar Android en Arch Linux kjjjnob.seba 0 1,162 05-11-2014 05:42 AM
Último mensaje: kjjjnob.seba
  [Tutorial] Como compilar un kernel para dispositivos ¨GOOGLE¨ y meterlo en el boot.img r0i 0 2,479 14-10-2013 07:22 PM
Último mensaje: r0i

Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)









Sobre Root4ever

Licencia de Creative Commons
Root4ever está bajo licencia Creative Commons Reconocimiento 4.0 Internacional License, podrá reproducir libremente el contenido de este sitio mencionando el AUTOR, la FUENTE y URL original.

  • © Root4ever - 2017