lib/committer.js
function clone(c, wl, bl) {
	var cl = {}, cp, t;
	for (var keys = Object.keys(c), l = 0; l < keys.length; l++) {
		cp = c[keys[l]];
		if (bl && bl.indexOf(cp) >= 0) {
			continue;
		}
		if (Array.isArray(cp)) {
			cl[keys[l]] = cp.slice(0);
		} else if ((t = typeof cp) === 'function') {
			if (!wl || wl.indexOf(cp) >= 0) {
				cl[keys[l]] = cp; // cp.bind(cp);
			}
		} else if (cp == null || t === 'string' || t === 'number' || t === 'boolean' || util.isRegExp(cp)
				|| util.isDate(cp) || util.isError(cp)) {
			cl[keys[l]] = cp;
		} else if (t !== 'undefined') {
			cl[keys[l]] = clone(cp, wl, bl);
		}
	}
	return cl;
}
function clone(c, wl, bl) {
	var cl = {}, cp, t;
	for (var keys = Object.keys(c), l = 0; l < keys.length; l++) {
		cp = c[keys[l]];
		if (bl && bl.indexOf(cp) >= 0) {
			continue;
		}
		if (Array.isArray(cp)) {
			cl[keys[l]] = cp.slice(0);
		} else if ((t = typeof cp) === 'function') {
			if (!wl || wl.indexOf(cp) >= 0) {
				cl[keys[l]] = cp; // cp.bind(cp);
			}
		} else if (cp == null || t === 'string' || t === 'number' || t === 'boolean' || util.isRegExp(cp)
				|| util.isDate(cp) || util.isError(cp)) {
			cl[keys[l]] = cp;
		} else if (t !== 'undefined') {
			cl[keys[l]] = clone(cp, wl, bl);
		}
	}
	return cl;
}
function clone ( c , wl , bl ) { var cl = { } , cp , t ; for ( var keys = Object . keys ( c ) , l = 0 ; l < keys . length ; l ++ ) { cp = c [ keys [ l ] ] ; if ( bl && bl . indexOf ( cp ) >= 0 ) { continue ; } if ( Array . isArray ( cp ) ) { cl [ keys [ l ] ] = cp . slice ( 0 ) ; } else if ( ( t = typeof cp ) === 'function' ) { if ( ! wl || wl . indexOf ( cp ) >= 0 ) { cl [ keys [ l ] ] = cp ; // cp.bind(cp); } } else if ( cp == null || t === 'string' || t === 'number' || t === 'boolean' || util . isRegExp ( cp ) || util . isDate ( cp ) || util . isError ( cp ) ) { cl [ keys [ l ] ] = cp ; } else if ( t !== 'undefined' ) { cl [ keys [ l ] ] = clone ( cp , wl , bl ) ; } } return cl ; }
Clones an object

@param c
the {Commit} to clone
@param wl
an array of white list functions that will be included in the
clone (null to include all)
@param bl
an array of black list property values that will be excluded from
the clone
@returns {Object} clone
Clones an object