#!/usr/bin/python
import os
import sys
import time

# Minimum number of lines in file to be kept intact
min_file = 3
# Shall we remove files with content merged with another file?
#dont_delete = False
dont_delete = True

def count_lines(filename):
    cnt = 0
    for line in file(filename):
        cnt = cnt + 1
    return cnt


def merge(intofile, fromfile):
    intofile = file(intofile, "a");
    fromfile = file(fromfile, "r");
    
    str = fromfile.read()
    intofile.write(str)

    intofile.close()
    fromfile.close()


def clean_user(arg, dirnames, fnames):
    if dirnames == arg:
        return
    print "Doing", dirnames
    fnames.sort()
    grouped = None

    for fname in fnames:
        name = dirnames + "/" + fname
        lines = count_lines(name)
        sys.stdout.write("%s has %d lines -- " % (name, lines))
        if lines < min_file:
            if grouped <> None:
                merge(grouped, name);
                if dont_delete:
                    os.rename(name, name + ".removed")
                else:
                    os.remove(name)
                print "merged"
            else:
                grouped = name
                print "omitted"
        else:
            grouped = None
            print "omitted"


def help():
    print "Usage: ./clean-up <directory>"
    print "As the program is not fool-proof and works recursively"
    print "*** DON'T RUN IT ANYWHERE UNLESS YOU ARE SURE THIS IS WHAT"
    print "YOU WANT TO DO. ***"
    print "Also, please make a copy of files."
    print "Tested with plain-text logger and jabber account, ie.:"
    print "./clean-up ~/.purple/logs/jabber/account/"


if len(sys.argv) < 2:
    help()
else:
    dir = sys.argv[1]
    print "* Starting clean-up in", dir, "in 3 seconds..."
    time.sleep(3)

    os.path.walk(dir, clean_user, dir);
