Nightlies Are For Dummies.

While working on our ZIMPERIUM Mobile IPS a.k.a zIPS, I’ve decided to take a break from this heavy duty work and enjoy myself a little with building our own ZIMPERIUM ROM, eg zROM. And here is my take.

~

No Nightlies for you!

~

Some Android ROM distributions allows nightlies updates, and many users happily oblige and install them. nightly.
I don’t like waste. And imo nightlies distributed to end-users, unlike beta-testers, is a complete waste; waste of resources, bandwidth, storage, and time, which is the most expensive commodity of all. I can already imagine the average Joe XDA user quoting OMNIs’ statement that ‘“nightlies are not for end users” is over-used, and no longer valid‘ BS. And I say BS because ignoring the waste doesn’t make it disappear.

I encourage everyone to check their ROM nightly changlelogs, and I provide my own script [*] to make it easier for Joe XDA to use it also. Updating a 200MB after a few translations files got updated or a new ADB rule got enforced, is a complete nonsense. Once you actually check the daily changelogs, you will also notice one major commit title repeating itself: REVERT. Many of those testings commits gets reverted because they break something, and it takes (usually) a few days to track this down and revert the faulting commit, meanwhile, leaving Joe XDA with a feature broken, in an optimistic scenario. In a real-life scenario, some of those nightlies will leave the users with a useless brick (I do admit it’s getting more rare due to exclusion of recovery.img from nightlies and less /system/ related changes). So now we’ve added stability to the waste.

Don’t be a sheep. Stop the waste. Trust the developers to do their work, and install the minor/major versions as they, the people who really knows what is working and what is not, decides to release.

[*]

#!/bin/bash
#
# Copyright (C) 2014 ZIMPERIUM Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
# Name : repolog.sh
#
# Descr: display logs from all repo git repositories
#
# Usage: repolog.sh <SINCE>|<DEVICE>
#
#        <SINCE> can be any valid git --since parameter, eg, 'yesterday'
#        or 'lastbuild' for getting logs since latest build (default)
#
#        <DEVICE> can be any device built already & exists in out/ dir, 
#        to show logs since latest build for this <DEVICE>
#
# Examples:
#
# To get all logs since yesterday:
# ./repolog.sh yesterday
#
# To get all logs since latest i9300 build:
# ./repolog.sh i9300
#
# To get all logs since latest build:
# ./repolog.sh
#

get_date() {
        find $1 -maxdepth 1 -printf "%TY-%Tm-%Td-%TT\n" | sort -nr | head -n 1 ;
}

TOP_DIR=${ANDROID_BUILD_TOP:-`pwd`}
SHOWGITNAME="yes"
PARAM=${1:-"lastbuild"}
case "$PARAM" in
        lastsync)
                # get date for last repo sync
                SINCE=$(get_date ${TOP_DIR}/.repo/project.list)
                ;;
        lastbuild)
                # get date for latest build of ANY device type
                SINCE=$(get_date ${TOP_DIR}/out/target/product/)
                ;;
        *)
                # get date for latest build of specific device type
                SINCE=$(get_date ${TOP_DIR}/out/target/product/$1)
                if [ -z $SINCE ]; then
                        # if no device found, use PARAM as SINCE, eg 'yesterday'
                        SINCE=$PARAM
                fi
                ;;
esac

repo forall -c '
        LOG=$(git log --since "'$SINCE'" --pretty=format:"%C(yellow)%ad %Cred%s%Creset%Cblue [%ce]%Creset" --decorate --date=short --numstat); 
        [ "$LOG" != "" ] && ([ "'$SHOWGITNAME'" != "" ] && TITLE=`sed -n "s/projectname.*=//p" .git/config|tr -d "[ \t]"` || TITLE="$REPO_PATH"; printf "===[ $TITLE ]";printf "%*s\n" "`expr ${COLUMNS:-$(tput cols)} - ${#TITLE} - 7`" "" | tr " " "="; echo "$LOG\n";)
' | less -FRX
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s