def show(i):
    """
    Input:  {
              (data_uoa) - repo UOA

              (reset)    - if 'yes', reset repos

              (stable)   - take stable version (highly experimental)
              (version)  - checkout version (default - stable)
            }

    Output: {
              return       - return code =  0, if successful
                                         >  0, if error
              (error)      - error text if return > 0
            }

    """

    import os

    o=i.get('out','')

    curdir=os.getcwd()

    duoa=i.get('data_uoa','')

    reset=i.get('reset','')

    stable=i.get('stable','')
    version=i.get('version','')
    if stable=='yes': version='stable'

    r=ck.list_data({'module_uoa':work['self_module_uoa'], 
                    'data_uoa':duoa})
    if r['return']>0: return r

    if o=='con':
       ck.out('Please wait - it may take some time ...')
       ck.out('')

    r=ck.reload_repo_cache({}) # Ignore errors

    # Init header.
    pp=[({'branch':'branch', 'origin':'origin', 'checkout':'local', 'path':'path', 'type':'type', 'url':'url', 'data_uoa':'data_uoa'})]
    il=0
    for q in ck.cache_repo_info:
        # Get repo info
        qq=ck.cache_repo_info[q]

        d=qq['dict']

        t=d.get('shared','')

        if t!='':
           duoa=qq['data_uoa']

           if len(duoa)>il: il=len(duoa)

           p=d.get('path','')
           url=d.get('url','')

           branch=''
           origin=''
           checkout=''

           if os.path.isdir(p):
              # Detect status
              os.chdir(p)

              if reset=='yes':
                 r=ck.run_and_get_stdout({'cmd':['git','checkout','master']})

              if version!='':
                 cx=qq.get('dict',{}).get('checkouts',{}).get(version,{})
                 branch=cx.get('branch','')
                 checkout=cx.get('checkout','')

                 if branch!='':
                    r=ck.run_and_get_stdout({'cmd':['git','checkout',branch]})

                 if checkout!='':
                    r=ck.run_and_get_stdout({'cmd':['git','checkout',checkout]})

              # FGG TBD: we may need to add explicit check for branch/checkout in repo_deps here?
              # OR MAYBE NOT - need to think ...

              # Get current branch
              r=ck.run_and_get_stdout({'cmd':['git','rev-parse','--abbrev-ref','HEAD']})
              if r['return']==0 and r['return_code']==0:
                 branch=r['stdout'].strip()

              # Get origin hash
              r=ck.run_and_get_stdout({'cmd':['git','rev-parse','--short','origin/HEAD']})
              if r['return']==0 and r['return_code']==0:
                 origin=r['stdout'].strip()

              # Get current hash (append '-dirty' on dirty working tree)
              r=ck.run_and_get_stdout({'cmd':['git','describe','--match=NeVeRmAtCh','--always','--abbrev','--dirty']})
              if r['return']==0 and r['return_code']==0:
                 checkout=r['stdout'].strip()

           pp.append({'branch':branch, 'origin':origin, 'checkout':checkout, 'path':p, 'type':t, 'url':url, 'data_uoa':duoa})

    # Print
    for q in pp:
        name=q['data_uoa']

        x=name+' '*(il-len(name))

        branch=q.get('branch','')
        origin=q.get('origin','')
        checkout=q.get('checkout','')
        url=q.get('url','')

        if branch!='' or 'origin' or checkout!='' or url!='':
           x+=' ( '+branch+' ; '+origin+' ; '+checkout+' ; '+url+' )'

        ck.out(x)

    os.chdir(curdir)

    return {'return':0}
Input:  {
              (data_uoa) - repo UOA

              (reset)    - if 'yes', reset repos

              (stable)   - take stable version (highly experimental)
              (version)  - checkout version (default - stable)
            }

    Output: {
              return       - return code =  0, if successful
                                         >  0, if error
              (error)      - error text if return > 0
            }